2

この質問を投稿しているのは、解決するのが非常に難しく、時間がかかることがわかったので、解決策を文書化できるようにするためです。

私はSilverlight 4 プロジェクトでLaurent Bugnion の優れたMVVM Light Toolkitを使用しており、Microsoft.Practices.ServiceLocation で彼のViewModelLocatorパターンを使用しています。Blendability の設計時モデルをロードするための ServiceLocator 最初に、 Expression Blend 4でのビューの読み込みは機能しており、設計時のデータ バインディングは優れていました。これは、Blend でエラー メッセージが表示されることなく、ある時点で機能しなくなりました。

Visual Studio 2010 SP1を使用してBlend.exeにアタッチし、問題をデバッグしました。EntryPointNotFoundException (エントリ ポイントが見つかりませんでした) 例外は、次のコード行でスローされていました。

return ServiceLocator.Current.GetInstance<ExampleViewModel>();

奇妙なことに、デザイン時のデータ バインディングが正しく機能している状態で、Visual Studio XAML デザイナーに同じビューを正常に読み込むことができました。別の Visual Studio インスタンスを使用して、XAML デザイナーをホストする Visual Studio インスタンスにデバッガーをアタッチし、ServiceLocator 呼び出しが正常に実行されていることを確認できました。

例外の詳細 (スタック トレース、InnerExcetion など) からは、問題に対するこれ以上の手がかりは得られず、役に立たないエラー メッセージをインターネットで検索しても、それ以上の情報は得られませんでした。

最終的に、Visual Studio のイミディエイト ウィンドウを使用して、問題の原因となっているコード行の一部を実行することで幸運に恵まれ、はるかに優れたエラー メッセージが表示されました。

?ServiceLocator.Current

タイプ 'Microsoft.Practices.ServiceLocation.ServiceLocator' は、'Microsoft.Practices.ServiceLocation.dll' と 'Microsoft.Practices.ServiceLocation.dll' の両方に存在します。

変更セットを以前に動作していたコードと比較すると、GalaSoft.MvvmLight.Extras.SL4 への参照をSilverlightプロジェクト (UI プロジェクトを参照する)の別の単体テスト フレームワークに追加したことに気付きました。このテスト プロジェクトは C:\Program Files (x86)\Laurent Bugnion (GalaSoft)\Mvvm Light Toolkit\Binaries\Silverlight4 からアセンブリを参照していましたが、UI プロジェクトは ..\packages\MvvmLightLibsPreview.4.0.0\ から参照していました。 lib\SL4. ナゲットパッケージMvvmLightLibsPreviewを使用して、MVVM Light をクライアント プロジェクトに追加しました。

ブレンド結果 - エラーと出力ウィンドウには、どの時点でもエラー メッセージは表示されませんでした。明らかに、問題をより迅速に把握するのに役立つ Blend のトラブルシューティング手法がない限り、本当の答えは必要ありません。

4

3 に答える 3

1

Windows 7 コントロール パネルを使用して MVVM Light をアンインストールするまで問題は解決しませんでしたが、ほとんど同じ問題がありました。NuGet MVVM Light の参照はまだプロジェクトにありましたが、設計時のデータを確認できるようになりました。以前壊れていました。

MVVM Light Web サイトのアドバイスに従い、Visual Studio 2012 の Blend プレビューを添付したところ、上記のエラー (EntryPointNotFoundException) を受け取りました。その時でさえ、互いに競合している 2 つの異なるバージョンの MVVM Light を削除する必要があるとは思いもしませんでした。

于 2012-09-22T02:31:47.107 に答える
0

NuGetからのパッケージの内容全体をコピーしようとしてしまいました。

C:\ Program Files(x86)\ Laurent Bugnion(GalaSoft)\ Mvvm Light Toolkit \ Binaries

それは問題を解決しませんでした。MVVM Lightをアンインストールすると、スニペットなどの他のものが削除されたため、戻ってトラブルシューティングを行うことにしました。私は成功せず、大まかな一時的な解決策しか見つけることができませんでした。

4つのDLLファイルを見て、機能するプロジェクトと機能しないプロジェクトを比較してみました。

GalaSoft.MvvmLight.Extras.WPF4 GalaSoft.MvvmLight.WPF4 Microsoft.Practices.ServiceLocation System.Windows.Interactivity

バージョンに違いはありません。

したがって、現時点での回避策は、VisualStudio2012でMVVMLightWPFテンプレートを使用して新しいプロジェクトを開始し、それをビルドしてから、上記の4つのDLLへの参照を削除することです。次に、NuGetからパッケージMVVM Lightをインストールし、App.xamlのビューモデルロケーターのダブルエントリを編集すると、プログラムは正常に動作します。この時点で、メインウィンドウにデザインデータメッセージが表示されます。

「MVVMLight[デザイン]へようこそ」

于 2012-09-22T23:39:16.217 に答える
0

ご想像のとおり、テスト プロジェクトの MVVM Light アセンブリ参照を変更して、クライアント UI プロジェクトで使用されているものと同じnugetパッケージ バージョンを使用すると、問題が修正されます。Microsoft.Practices.ServiceLocation.dll の 2 つのバージョンが Blend と同じ方法で参照されているという問題が Visual Studio で発生しなかった理由がわかりません。

于 2011-11-17T00:36:06.713 に答える