在Nuget中,我们现在可以使用PackageReference格式进行依赖,还可以使用lock files启用可重复的构建
在我的项目中,我得到了类似的东西:
{ "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执行其还原时,给定程序集的一个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和lock文件将消除对程序集绑定重定向的需要。但是我现在的印象是仍然需要避免这些错误。
对吗?绑定重定向的需求是否必然意味着依赖项设置有问题?当库指定它们将接受等于或高于X.Y.Z版本的DLL时,为什么必须进行绑定重定向?
答案 0 :(得分:0)
似乎System.Net.Http.Formatting.dll需要Newtonsoft.Json v6.0,并且由于另一个文件定义了要使用的版本12.0.1,您会收到此错误。
也许您可以将System.Net.Http.Formatting.dll升级到与Newtonsoft 12.0.1兼容的版本?
如果您为Newtonsoft定义绑定重定向,则向CLR保证程序集兼容,即使其内部引用另有说明。不兼容的dll在运行时可能仍然会出现问题。