1

私は現在、WP71プロジェクトとWP8プロジェクトを備えたVS2012ソリューションを持っています。これらの各プロジェクトは、ビューモデルを保持するポータブルクラスライブラリプロジェクトを参照しています。PCLを参照し、ビューモデルのテストを含む単体テストプロジェクトもあります。

私が抱えている問題は、単体テストプロジェクトをコンパイルすると、次のエラーが発生することです。

error CS0012: The type 'System.Windows.Input.ICommand' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'

単体テストプロジェクトを含むすべてのプロジェクトは、Portable.MvvmLightLibsNuGetパッケージを参照します。

このアセンブリを探し回った後、WP8用とSilverlight 4用など、さまざまなバージョンがあることに気付きました。これらすべてのバージョンのうち、どちらを使用すればよいかわかりません。

単体テストプロジェクトは.NETFramework4.5を対象としているため、動作するそのバージョンのSystem.Windowsアセンブリを追加しましたが、次のエラーが発生します。

 error : CA0001 : Could not resolve reference to System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes

これはコード分析エラーであるため、これを無視して続行したいのですが、これを解決する方法や、無視しても安全かどうかについて誰かが考えているのではないかと思いました。

4

1 に答える 1

2

それで、私は問題を解決する方法を考え出しました。

テストプロジェクトをコンパイルするには、System.Windows.dllアセンブリを次の場所から追加する必要がありました。

C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ Silverlight \ v4.0 \ Profile \ WindowsPhone71

ただし、[参照の追加]ダイアログを使用して追加すると、フォルダーを直接参照した場合でも、.NET4.5バージョンが自動的に追加されます。これを修正するために、テストプロジェクトの* .csprojを開き、次の行を置き換えました。

<Reference Include="System.Windows"/>

<Reference Include="System.Windows">
      <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71\System.Windows.dll</HintPath>
</Reference>

これにより、.NET4.5バージョンではなく2.0.5.0バージョンが参照されるようになりました。このアプローチの問題は、特定のタイプが他のアセンブリ、つまりSystem.dllと競合することですが、ポータブルクラスライブラリからのビューモデルのみをテストしているので、それほど気になりません。

理想的には、テストプロジェクトもポータブルクラスライブラリですが、私はそれをテストすることに慣れていません。

もう1つの問題は、リリースモードでビルドするときに警告がエラーとして表示される傾向があることでした。これは、System.dllとの名前の衝突について不平を言う警告が常にあるため、常に失敗します。

于 2013-03-27T19:31:56.230 に答える