Net Framework 4 dllをNet Coreに移植しています。ユニットテストプロジェクトを移植すると、特定のテスト(すべてではない)を実行する例外が発生します。
System.IO.FileLoadException:ファイルまたはアセンブリ「System.Net.Http、Version = 4.1.1.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a」またはその依存関係の1つをロードできませんでした。検出されたアセンブリのマニフェスト定義は、アセンブリ参照と一致しません。 (HRESULTからの例外:0x80131040)
これは私のdllのproject.jsonです
{
"version": "1.0.0-*",
"dependencies": {
"log4net": "2.0.7",
"NETStandard.Library": "1.6.1",
"Newtonsoft.Json": "9.0.1",
"StackExchange.Redis": "1.2.1"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
そして、これはユニットテストプロジェクトのPackages.configです
<packages>
<package id="Castle.Core" version="4.0.0" targetFramework="net462" />
<package id="log4net" version="2.0.7" targetFramework="net462" />
<package id="Microsoft.Win32.Primitives" version="4.0.1" targetFramework="net462" />
<package id="Moq" version="4.7.1" targetFramework="net462" />
<package id="Newtonsoft.Json" version="9.0.1" targetFramework="net462" />
<package id="StackExchange.Redis" version="1.2.1" targetFramework="net462" />
<package id="System.Diagnostics.DiagnosticSource" version="4.0.0" targetFramework="net462" />
<package id="System.IO" version="4.1.0" targetFramework="net462" />
<package id="System.IO.FileSystem" version="4.0.1" targetFramework="net462" />
<package id="System.IO.FileSystem.Primitives" version="4.0.1" targetFramework="net462" />
<package id="System.IO.FileSystem.Watcher" version="4.0.0" targetFramework="net462" />
<package id="System.Linq" version="4.1.0" targetFramework="net462" />
<package id="System.Net.Http" version="4.1.1" targetFramework="net462" />
<package id="System.Net.NameResolution" version="4.0.0" targetFramework="net462" />
<package id="System.Runtime" version="4.1.0" targetFramework="net462" />
<package id="System.Runtime.Extensions" version="4.1.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Algorithms" version="4.2.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Encoding" version="4.0.0" targetFramework="net462" />
<package id="System.Security.Cryptography.Primitives" version="4.0.0" targetFramework="net462" />
<package id="System.Security.Cryptography.X509Certificates" version="4.1.0" targetFramework="net462" />
<package id="System.Text.RegularExpressions" version="4.1.0" targetFramework="net462" />
<package id="System.Threading.Thread" version="4.0.0" targetFramework="net462" />
</packages>
System.Net.Httpを4.3.1に更新して修正しました
私は問題を取得し、それが私が2つの異なる参照を持っていたためであることに気づきました。 1つは私のプロジェクトライブラリからの参照であり、2つ目は.Net標準ライブラリの依存関係であり、したがってNugetパッケージです。解決する手順は次のとおりです。
System.Net.Http
への参照を削除します(プロジェクト=>参照を追加=>参照を削除)。Update-Package –reinstall System.Net.Http
を実行して、参照を戻します。今では再び動作します。 :)
私の問題は、新しいバージョンのSystem.Net.Httpへの参照を持つ参照アセンブリがサービスにあったことです。サービスのSystem.Net.Httpを更新することで問題を解決しました。
そして今、ジュニアプログラマーソリューション.... JagetとJeanによって提案された更新をNuget Package Managerの正しい場所でも行っていることを再確認してください。プロジェクトとテストプロジェクトにソリューションがある可能性があることを忘れないでください。そのため、両方の参照セットを更新するために再確認してください。
App.configに移動し、System.Net.Httpを参照するすべての行を削除します。
私はこの問題を抱えていましたが、お互いに依存する10のプロジェクトがありました。依存しているプロジェクトの1つで要求したバージョンを追加することで、これを修正しました。コンパイルには必要ありませんでしたが、それを追加すると、復元中に他のプロジェクトのバージョンが修正されたようです。だから:
ファイルまたはアセンブリ「System.Net.Http、Version = 4.1.1.0、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a」またはその依存関係の1つをロードできませんでした。システムは、指定されたファイルを見つけることができません。
次に:
ファイルまたはアセンブリ「System.Net.Http、Version = 4.1.1.1、Culture = neutral、PublicKeyToken = b03f5f7f11d50a3a」またはその依存関係の1つをロードできませんでした。システムは、指定されたファイルを見つけることができません。
そこで、1つのプロジェクトに「System.Net.Http」:「4.1.1」を追加しました。
8つのプロジェクトを復元しながら、実際に問題を修正しました。
この問題を解決する最良かつ最も簡単な方法は、バインディングリダイレクトを使用することです。
OldVersionを0.0.0.0-5.0.0.0として、newVersionを4.1.1.0として指定するだけです
たとえば、バージョン4.1.1.0はバージョンです。
私はジャンに同意します。アセンブリへの参照を削除してから、Nugetを使用して新しい参照を追加してください!実際のSystem.Net.Httpバージョンは関係ありません。アセンブリへの参照を削除した後、すべて正常に動作する、バージョン4.3.2