MSテストの単体テストにMSTest.TestAdapterとMSTest.TestFrameworkの両方のバージョン1.2.0を使用しています。私のローカルマシン(Visual Studio 2017)ではテストは完全に実行されますが、ビルドサーバーでは次のメッセージが表示されます。
ファイルまたはアセンブリ 'Microsoft.VisualStudio.TestPlatform.ObjectModel、Version = 11.0.0.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a'またはその依存関係の1つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。
次に、このアセンブリの参照をildasmで確認しました。実際、これは11.0.0.0バージョンです(以下を参照)。
ただし、このアセンブリのv11が見つかりません。オンラインでは、nugetにはv14バージョンしかありません。 https://www.nuget.org/packages/Microsoft.VisualStudio.TestPlatform.ObjectModel/
自分のマシンでも検索しましたが、v11が見つかりませんでした。
だから私の質問、なぜテストはビルドサーバーではなく私のマシンで実行されるのですか?
アセンブリバインディングを試しましたが、成功しませんでした。
必要なNuGetパッケージは、Christopher.Hawsによって作成されたMicrosoft.VisualStudio.TestPlatform.ObjectModelパッケージではなく、Microsoftによって作成されたMicrosoft.TestPlatform.ObjectModelです。
https://www.nuget.org/packages/Microsoft.testplatform.objectmodel/
Microsoftパッケージには、そのように名前が付けられていないにもかかわらず、Microsoft.VisualStudio.TestPlatform.ObjectModelアセンブリが含まれています。同じエラーが発生し、Microsoftパッケージのv11をインストールすると、ビルドサーバーのビルドが修正されました。
同じ問題で、最新バージョンをインストールできました。
Install-Package Microsoft.TestPlatform.ObjectModel -Version 15.8.0
次に、バインディングリダイレクトをテストプロジェクトapp.configに追加します。
<runtime>
<assemblyBinding xmlns="urn:schemas-Microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.VisualStudio.TestPlatform.ObjectModel" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="11.0.0.0-14.0.0.0" newVersion="15.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
他の回避策が推奨されます ここ
「Microsoft.VisualStudio.TestPlatform.ObjectModel」アセンブリの型を反映しないでください。 OR Microsoft.NET.Test.Sdkを15.3.0にダウングレードします。
.NETコアではなく.NETフレームワークを使用しているため、おそらく2番目のオプションは適用されません。
その他の背景:
別のプロジェクトで同じ問題に再び直面した後、私たちはそれをもう一度見て、解決策を見つけました。
Install-Package Microsoft.TestPlatform.ObjectModel -Version 11.0.0
しかし、これだけでは不十分でした。アセンブリがビルドサーバーによって確実に取得されるように、デプロイメントアイテムとして基本テストクラスに追加しました。
[DeploymentItem("Microsoft.VisualStudio.TestPlatform.ObjectModel.dll")]
そして今、ビルドサーバーは再びユニットテストを取得しています:-)
Grtz
NUnit 3.0のNuGetパッケージをソリューション内のいくつかのプロジェクトに誤って追加してから削除した後、同じエラーが発生しました。
参照が完全に削除されませんでした。各.csprojファイルを手動で開き、以前に削除したNuGetパッケージへのすべての参照を削除する必要がありました。クリーンアップして再構築した後、エラーはなくなりました。