Nuget では、依存関係にPackageReference形式を使用できるようになり、ロック ファイルを使用して反復可能なビルドを有効にすることもできます
私のプロジェクトでは、次のようなものを取得します。
{ "version": 1, "dependencies": { ".NETFramework,Version=v4.6.1": { "System.Reactive": { "type": "Direct", "requested": "[4.1.2, )", "resolved": "4.1.2", "contentHash": "QRxhdvoP51UuXZbSzcIiFu3/MCSAlR8rz3G/XMcm3b+a2zOC5ropDVaZrjXAO+7VF04Aqk4MCcLEdhxTfWVlZw==", "dependencies": { "System.Threading.Tasks.Extensions": "4.5.1", "System.ValueTuple": "4.4.0" } }, "System.Threading.Tasks.Extensions": { "type": "Direct", "requested": "[4.5.2, )", "resolved": "4.5.2", "contentHash": "BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==", "dependencies": { "System.Runtime.CompilerServices.Unsafe": "4.5.2" } }, "Apache.Avro": { "type": "Transitive", "resolved": "1.7.7.2", "contentHash": "4zx8Y5wnavxi57ivpMIon4XAnY0d69e4KoiTkMgy4LcstVUPXqD1YZ+IKl3TV2dzV6PJvYGrsLViN+dAN16yvg==", "dependencies": { "Newtonsoft.Json": "3.5.0", "log4net": "1.2.10" } }, "Newtonsoft.Json": { "type": "Transitive", "resolved": "12.0.1", "contentHash": "jmVyoEyk0In8r+AObYQyFKVFm7uSRzE0XSHSbEtBJcZDMV6DqJoyB4FLcHwprPVhAh826so0db3DIKXVnpGoPA==" },
たとえば、競合する Newtonsoft.Json 依存関係があることがわかります。この場合、Apache.Avro の依存関係には、バージョンが >= 3.5.0 である必要があるため、互換性があるはずであると記載されていると思います。
NuGet が復元を実行すると、特定のアセンブリに対して 1 つの DLL のみが解決され、アプリケーションの起動時に使用されます。ロック ファイルがなければ、すべての csproj ファイルで AutoGenerateBindingRedirects=true を使用する必要がありました。
これにより、おなじみのバインド リダイレクトが生成されます: oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0"
このようなリダイレクトがないと、同様に見慣れたエラー メッセージが表示されます。
2019-02-19 11:24:10.955 [Debug] host_Opened
2019-02-19 11:24:11.058 [Error] Could not load file or assembly 'Newtonsoft.Json, Version=6.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)
2019-02-19 11:24:11.058 [Error] at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter..ctor()
起動時。依存関係が非常に古い Newtonsoft.Json バージョンを必要としており、解決済みのバージョン 12.0.1 のみを提供したためです。
私は、新しい PackageReference とロック ファイルにより、アセンブリ バインド リダイレクトの必要性がなくなるという印象を受けました。しかし、私の印象では、上記のエラーを回避するためにまだ必要であるということです。
あれは正しいですか?リダイレクトをバインドする必要があるということは、依存関係の設定に何か問題があることを意味しているのでしょうか? ライブラリが XYZ 以上のバージョンの DLL を受け入れるように指定している場合、バインディング リダイレクトが必要になるのはなぜですか?