RealPath:
WebPath:
2017/04/12 09:13 (JST) 更新
エラー対策 >>

Could not load file or assembly Newtonsoft.Json

Contents

エラーメッセージ

エラーメッセージ
Unhandled Exception: System.IO.FileLoadException: Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
   at ClassLibrary1.Class1.Test()
   at ConsoleApp1.Program.Main(String[] args) in C:\Projects\ConsoleApp1\ConsoleApp1\Program.cs:line 14

状況

複数のプロジェクトが依存関係を持っており、それぞれのプロジェクトが異なるバージョンの同一 NuGet パッケージを参照していると、上述のようなエラーが発生し得る。

今回は Newtonsoft.Json を例に出したが、これは NuGet パッケージの種類に関係なく発生する。

特に起こりやすい例

特に気を付けたい点として、現時点 (2017年4月 Visual Studio 2017 Community) で確認した限りでは、ASP.NET MVC プロジェクトを新規作成すると、デフォルトで Newtonsoft.Json 6.0.4 への参照が含まれるため、これのアップデート (Update-Package) を忘れると、依存ライブラリとの整合性が崩れ、上述のようなエラーに遭遇する例が多い。

対策

プロジェクト間で依存する NuGet パッケージのバージョンを合わせる。

今回の例であれば Package Manager Console で以下コマンドを実行する。

PM> Update-Package -reinstall Newtonsoft.Json

この対応により、それぞれのプロジェクトに含まれる packages.config 内の該当パッケージのバージョンが一致したことを念のため確認しておくと良い。

参考