突然、いくつかのNuGetパッケージ(主にASPNET Identityに関連する)を追加した後、次のエラーが表示され始めました。
FileNotFoundException: Could not load file or Assembly 'System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
.Net Framework 4.7.1をターゲットにしています。 NuGetパッケージSystem.Runtime 4.3.0をインストールしようとしましたが、役に立ちませんでした。 web.configファイルには参照があります。
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/>
</dependentAssembly>
BinフォルダーにはSystem.Runtime.dllはありません。
何か案は?
Visual Studio 2017 15.5.5を使用しています。
更新:
.csprojファイルでPackageReferenceエントリを使用しているため、packages.configの問題ではありません。
一部の依存関係がロードされていないようです。
最近、プロジェクトをnet462からnet471にアップグレードしました。私の場合の問題は、net462バージョンで必要なアセンブリリダイレクトでしたが、net471がひどく混乱していました。
解決策は、web.config内のすべてのアセンブリリダイレクトエントリを削除し、Visual Studioでそれらを再計算できるようにすることでした。それらは警告として表示され、クリックするとweb.configに再追加されます。
私のASP.NETプロジェクトは、VS 15.8.4でこれが起こり始めた時点ですでにnet471にありました。既存のNuGetパッケージを最新バージョンに更新しようとしたときに、IIS Expressでプロジェクトを起動すると、このエラーが表示されました。
BadImageFormatException:ファイルまたはアセンブリ 'System.Runtime'またはその依存関係の1つを読み込めませんでした。
プロジェクトのweb.configファイルを変更することで、この問題を解決できました。
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
</dependentAssembly>
これらのSystem.Runtime依存関係の両方のbindingRedirect行を削除すると、プロジェクトでこの問題が解決され、web.configでこの問題が発生します。
<dependentAssembly>
<assemblyIdentity name="System.Runtime.Serialization.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
</dependentAssembly>
BinフォルダーにはSystem.Runtime.dllはありません。
パッケージSystem.Runtimeは参照されますが、インストールする必要があります。
Visual Studioのメニューで、[ツール]> [NuGetパッケージマネージャー]> ソリューションのNuGetパッケージの管理...に移動します。
アクティブなNuGet-ソリューションウィンドウで、[インストール済み]タブに移動し、MicrosoftのSystem.Runtimeに移動します。プロジェクトのバージョンが存在する場合は、シングルクリックで選択し、サイドウィンドウを確認します。そうでない場合は、プロジェクトを選択して「インストール」をクリックします。
ビルドソリューション。