VSPackageプロジェクトでGraph#ライブラリを使用しようとしていますが、残念ながら克服すべき障害がいくつかあります。これが私がしたことです:
次のすべての DLL をプロジェクト ルートのフォルダー /Libraries にコピーしました。
- GraphSharp.dll
- GraphSharp.Controls.dll
- QuickGraph.dll
- WPFExtensions.dll
すべてのビルド アクションは「コンテンツ」であり、出力へのコピー オプションは「コピーしない」に設定されています。
これらの参照をプロジェクトに追加しました。(参照を追加... -> 参照 -> /Library フォルダーから選択)
その後、以下のファイルを作成しました。ViewModel が UserControl の DataContext に設定され、UI がバインドされる "MethodGraph" が定義されていることがわかります。
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>
分離コード
public partial class ExplorationControl : UserControl
{
public ExplorationControl()
{
InitializeComponent();
// set the datacontext
DataContext = InteractiveExplorationPackage.ExplorationToolViewModel;
}
}
ビューモデル
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;
}
}
幸いなことに、プロジェクト全体をコンパイルできますが、実行時に XAML で次のエラーがタグ (必要なタグのすぐ上) で発生します。
ファイルまたはアセンブリ 'GraphSharp.Controls, PublicKeyToken=null' またはその依存関係の 1 つを読み込めませんでした。システムはファイルを見つけることができません。
しかし、私はアセンブリを参照しました。それらは参照リストにリストされています。どうしたの?Visual Studio パッケージ(プラグイン)を作成するときに、アセンブリを通常とは別の方法で参照する必要があるのでしょうか?
編集: 別のプロジェクトで動作させようとしたので、通常の WPF アプリケーションをセットアップし、上記のすべてを実行しました。このソリューションでは、すべてが正常に機能します。それはとても奇妙です!
あなたが私を助けてくれることを願っています:-)よろしくお願いします!