3

J'essaie d'utiliser les bibliothèques Graph# dans mon projet VSPackage, mais il y a malheureusement quelques obstacles à surmonter. Voici ce que je faisais:XamlParseException lors de l'utilisation des bibliothèques Graph #

Je copiais toutes les DLL suivantes dans un dossier/Bibliothèques dans la racine du projet:

  • GraphSharp.dll
  • GraphSharp.Controls.dll
  • QuickGraph.dll
  • WPFExtensions.dll

l'action de construction de tous est « contenu » et l'option copier sur la sortie est réglée sur «ne pas copier.

J'ai ajouté ces références à mon projet. (Ajouter une référence ... -> Parcourir -> sélectionnez-les dans le dossier/Bibliothèque)

Ensuite, j'ai créé les fichiers suivants. Vous pouvez voir que ViewModel est défini comme le DataContext de UserControl et qu'il définit un "MethodGraph" auquel l'interface utilisateur se lie.

fichier XAML

<UserControl x:Class="Biocoder.InteractiveExploration.View.ExplorationControl" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:graphsharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300"> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 

    <ListView Grid.Row="0" ItemsSource="{Binding SelectedMethods}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn Header="Method" DisplayMemberBinding="{Binding Name}"/> 
       <GridViewColumn Header="ReturnType" DisplayMemberBinding="{Binding ReflectionInfo.ReturnType}"/> 
       <GridViewColumn Header="Incoming Calls"/> 
       <GridViewColumn Header="Outgoing Calls"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 

    <graphsharp:GraphLayout Graph="{Binding MethodGraph}"/> 

</Grid> 

</UserControl> 

code-behind

public partial class ExplorationControl : UserControl 
{ 
    public ExplorationControl() 
    { 
     InitializeComponent(); 

     // set the datacontext 
     DataContext = InteractiveExplorationPackage.ExplorationToolViewModel; 
    } 
} 

ViewModel

public class ExplorationToolViewModel : ViewModelBase 
{ 
    private IBidirectionalGraph<object, IEdge<object>> _methodGraph; 

    public IBidirectionalGraph<object, IEdge<object>> MethodGraph 
    { 
     get { return _methodGraph; } 
     set 
     { 
      if (value != _methodGraph) 
      { 
       _methodGraph = value; 
       NotifyPropertyChanged("MethodGraph"); 
      } 
     } 
    } 

    public ExplorationToolViewModel() 
    { 
     InitializeViewModel(); 
    } 

    private void InitializeViewModel() 
    { 
     SelectedMethods = new ObservableCollection<Method>(); 
     CreateGraph(); 
    } 

    private void CreateGraph() 
    { 
     var g = new BidirectionalGraph<object, IEdge<object>>(); 

     // add vertices 
     string[] vertices = new string[5]; 
     for (int i = 0; i < 5; i++) 
     { 
      vertices[i] = i.ToString(); 
      g.AddVertex(vertices[i]); 
     } 

     // add edges 
     g.AddEdge(new Edge<object>(vertices[0], vertices[1])); 
     g.AddEdge(new Edge<object>(vertices[1], vertices[2])); 
     g.AddEdge(new Edge<object>(vertices[2], vertices[3])); 
     g.AddEdge(new Edge<object>(vertices[3], vertices[1])); 
     g.AddEdge(new Edge<object>(vertices[1], vertices[4])); 

     MethodGraph = g; 
    } 
} 

Heureusement, je peux c ompile le projet entier mais à l'exécution l'erreur suivante dans le XAML se produit sur la balise (juste au-dessus de la balise nécessaire):

Impossible de charger le fichier ou l'assembly 'GraphSharp.Controls, PublicKeyToken = null' ou l'une de ses dépendances . Le système ne peut pas trouver le fichier.

Mais j'ai référencé les assemblages, ils sont listés dans la liste des références. Quel est le problème? Se pourrait-il que les assemblages doivent être référencés d'une autre manière que d'habitude lors de l'écriture d'un Visual Studio Package (plugin)?

EDIT: J'ai simplement essayé de le faire fonctionner dans un autre projet, donc je viens de configurer une application WPF normale et j'ai fait tout ce qui précède. Dans cette solution tout fonctionne correctement! C'est tellement étrange!

J'espère que vous pouvez m'aider :-) Cordialement!

Répondre

0

J'ai réussi à tout fonctionner maintenant. Merci pour votre aide de toute façon!

Le problème avec VSPackages à l'exécution est essentiellement qu'ils chargent des assemblées tierces à partir d'un autre emplacement sur l'ordinateur appelé le dossier Private Assembly . (C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ PrivateAssemblies) Tout ce que vous avez à faire est de copier les assemblys référencés dans ce dossier (nécessite les droits d'administrateur). Afin de pouvoir utiliser les assemblages lors du développement, ajoutez simplement ces références à votre projet comme vous le faites normalement et le compilateur les utilisera comme d'habitude. La seule différence est au moment de l'exécution car Visual Studio charge ces références à partir du dossier Assemblées privées.

Plus d'informations sur ce qui peut être trouvé ici: Managed VSPackage File Location Keys

1

Etes-vous capable d'utiliser nuget dans votre projet? Si oui, au lieu de copier manuellement les dll-s et les références, essayez la commande install-package graphsharp.

Je pense que c'est une sorte de problème DLL strong name.

+0

Merci pour votre aide! Je l'ai déjà essayé et il y a la même erreur. J'ai aussi essayé de ne pas signer mon projet (de telle sorte que les assemblages référencés puissent également rester non signés) et l'erreur persiste. Ce qui est très étrange, c'est que dans l'un des 20 cas cela fonctionne! Le GraphLayout ainsi que le ZoomControl peuvent être chargés et fonctionnent correctement! Je deviens folle bientôt, parce que j'ai essayé à peu près tout ce que je suis capable de faire. Serait très bien si vous aviez d'autres conseils! Merci jusqu'à présent! – Biocoder

+0

J'ai essayé de savoir s'il s'agissait d'un problème de signature (nom fort). Mais ce n'est pas le cas. Soit vous utilisez le code source du Graphique # et vous signez les assemblages vous-même, soit vous désinscrivez votre propre projet ([link] (http://msdn.microsoft.com/fr-fr/magazine/cc163583.aspx)). J'ai résolu le problème. Bien sûr, j'utilise maintenant la version la plus récente de NuGet. – Biocoder

0

Avez-vous essayé ce modèle?http://shfb.codeplex.com/workitem/32819

Il dit:

J'ai eu un tel problème et il est discuté quelque part dans les discussions. Qu'est-ce que vous devez faire est d'ouvrir les propriétés du projet> Chemins et là supprimer tous les chemins (juste les laisser vides)

Questions connexes