4

ポータブル クラス ライブラリと通常の単体テスト プロジェクトの 2 つのプロジェクトがあります。ポータブル クラス ライブラリでは、NuGet を使用して Microsoft.BCL Portability pack を参照します。このパックには 2 つのアセンブリ (両方とも v1.5) が付属していSystem.Threading.Tasks.dllますSystem.Runtime.dll

ただし、単体テスト プロジェクトでこれらの同じ dll を参照しようとすると (NuGet を使用する場合と、ディレクトリを手動で参照する場合の両方)、Visual Studio は自動的にバージョン 4.5 の\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl4+win8+wp71別のフォルダー here 内の dll への参照をポイントします。C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\

ここで、テストする必要があるメソッドがパラメーターとして受け入れCancellationTokenられ、コンパイル エラーがスローされます。The type 'System.Threading.CancellationToken' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Threading.Tasks, Version=1.5.11.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'その v4.5 ライブラリは、v1.5 ではなく参照されているためです。

ただし、v1.5 BCL ライブラリのこれらの機能を使用しないメソッドのテストを作成することはできました。

Visual Studio が参照ライブラリをフレームワークに付属のライブラリに置き換えるのはなぜですか? 特定のディレクトリで指定しているものだけを使用するように Visual Studio に指示するにはどうすればよいですか?

Visual Studio 2012 Update 2 を使用しています。

4

4 に答える 4

1

System.Runtime.dll v1.5/v2.5 および System.Threading.Tasks.dll v1.5/v2.5 への参照は、.NET Framework 4.5 プロジェクトのプラットフォームのものに置き換えられることが予想されます。ただし、これはバックグラウンドで発生する必要があり、監視可能であってはなりません。

私が疑っているのは、.NET Framework 4.0 テスト プロジェクトから始めて、.NET Framework 4.5 に再ターゲットしたことです。残念ながら、これが発生した場合、NuGet はパッケージを再インストールして 4.5 プロジェクトを正しい状態にしません。これを修正するには、次のことを試してください。

1) すべてのプロジェクトから、すべての依存関係を含む Microsoft.Bcl.Async パッケージをアンインストールします。これを行うには、ソリューション エクスプローラーを右クリックして、[ソリューションのマネージド NuGet パッケージ] を選択します。

2) パッケージがインストールされている各プロジェクトで App.Config を開き、System.Runtime および System.Threading.Tasks を参照するすべての assemblyBinding エントリを削除します。

3) System.Runtime および System.Threading.Tasks を参照しているプロジェクトがないことを確認します。参照している場合は、参照を削除します。

4) パッケージを再インストールする

これで調子が良くなるはずです。

この動作は NuGet 2.7 で改善されており、この状態になるとリターゲット時にエラー/警告が吐き出されることに注意してください。

于 2013-07-10T16:51:08.730 に答える
1

これは、Visual Studio 2013 では発生しないため、Visual Studio Update 2 の問題のようです。新しいバージョンの Visual Studio でプロジェクトを開くと、正しいアセンブリが読み込まれました。

プラグインが原因かどうかはわかりません。

于 2013-09-15T12:53:12.827 に答える
0

同様の問題がありました (そして、誰かのイライラした日々の仕事を救うかもしれません) - ソリューションの参照パスが判明しました (プロジェクト (ソリューションではありません) を右クリックし、プロパティを選択します。左側には、プロジェクトの設定があります (アプリケーション、コンパイル、デバッグ、参照など)。

「参照」を選択し、「Referenes」グリッドの上にある「参照パス」ボタンを選択します。ここのレフェレンのいずれかが古い DLL が見つかるディレクトリを指している場合、VS (私の場合は 2013) はここから DLL を選択します。

DLL の解決に実際に使用されているパスは、「参照」グリッドで確認できます。

古いパスをすべて削除し、再コンパイルします。

これにより、「'XXYYZZ' のバインド リダイレクトを生成できませんでした。同じキーを持つアイテムが既に追加されています。」という NuGet も削除されました。

于 2014-04-02T12:04:43.637 に答える