1. ホーム
  2. .net

ファイルまたはアセンブリ 'System.ComponentModel.Annotations, Version=4.1.0.0' を読み込めませんでした。

2023-11-18 05:18:32

質問

System.ComponentModel.Annotations (4.3.0) NuGet パッケージを参照する .NET Standard 1.4 クラス ライブラリを持っています。

そして、私は .NET Framework 4.6.2 テスト プロジェクトからこのクラス ライブラリを参照しています。それはうまく構築されますが、実行時に次のエラーが発生します。

System.IO.FileLoadException が発生しました HResult=0x80131040

Message= ファイルまたはアセンブリをロードできませんでした。 'System.ComponentModel.Annotations, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' またはその依存関係の 1 つ。その 配置されたアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 参照に一致しません。(HRESULT: 0x80131040 からの例外)

net462 プロジェクトから System.ComponentModel.Annotations (4.3.0) NuGet パッケージへの参照を追加してみましたが、何の変化も起こりませんでした。

net462 プロジェクトから .NET 標準ライブラリへの参照を追加してみましたが、やはりダメでした。

私はここで何かを見逃しているのでしょうか。これは既知のバグでしょうか、もしそうなら、回避策はありますか?

どんな助けでも大いに感謝します!

どのように解決するのですか?

多くの場合、テストプロジェクトの csproj ファイルに以下のコードを追加することで解決できます。

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

これにより、ビルドプロセスは強制的に .dll.config ファイルを出力ディレクトリに作成させます。

その理由は、"classic" csproj テストプロジェクトは真の "libraries" であり、デフォルトではバインディングリダイレクトを必要としないと考えられているためです。しかし、ユニットテストを実行するには、これが必要です。これは、参照されるプロジェクトが正しく動作するためにリダイレクトを必要とする場合にのみ問題になります。これは通常、参照されるライブラリが使用するすべての NuGet パッケージを直接インストールする場合に機能しますが、新しい PackageReference スタイルの NuGet パッケージでは、そうはいきません。

この修正が役に立った他の事例をご覧ください。

ファイルまたはアセンブリ Microsoft.Extensions.DependencyInjection.Abstractions を読み込めませんでした。

ライブラリで .Net Standard 1.4 を使用し、アプリケーションで .Net framework 4.6.1 を使用する場合、ファイル System.IO.FileSystem, Version=4.0.1.0 をロードすることができません。