.net Excel加载项';通过MSI安装时,s导入的Nuget包未绑定到引用的.dll
我们最近更新了Newtonsoft.JSON和另一个Nuget软件包SKGLExtension,它跨越了我们的WPF和Excel加载项产品 我们引用的所有项目都使用Newtonsoft.JSON.dll版本11.0.0 nuget包 WPF和Excel产品都引用一个engine.dll,然后它引用使用Newtonsoft.JSON.dll的SKGLExtension 通过MSI安装并运行Excel加载项时,会出现以下绑定错误: System.IO.FileLoadException:'无法加载文件或程序集 'Newtonsoft.Json,版本=6.0.0.0,区域性=中性, PublicKeyToken=30AD4FE6B2A6EED'或其依赖项之一。这个 定位程序集的清单定义与程序集不匹配 参考资料。(HRESULT的例外:0x8013100)' 从引擎dll中的这行代码:.net Excel加载项';通过MSI安装时,s导入的Nuget包未绑定到引用的.dll,.net,excel,nuget,.net,Excel,Nuget,我们最近更新了Newtonsoft.JSON和另一个Nuget软件包SKGLExtension,它跨越了我们的WPF和Excel加载项产品 我们引用的所有项目都使用Newtonsoft.JSON.dll版本11.0.0 nuget包 WPF和Excel产品都引用一个engine.dll,然后它引用使用Newtonsoft.JSON.dll的SKGLExtension 通过MSI安装并运行Excel加载项时,会出现以下绑定错误: System.IO.FileLoadException:'无法加载文
localKey=SKGL.SKM.LoadKeyInformationFromFile(keyPath,True,False)
该行前面有一个名为Newtonsoft.Json.JsonSerializer的测试语句,该语句运行良好
从VisualStudio调试启动时,外接程序工作正常
当通过MSI安装WPF项目时,WPF应用程序工作正常
在安装文件夹中,Newtonsoft.JSON.dll的版本为11.0.2.21924。在以前从未安装过的机器上进行清洁安装也是如此
我们的Bar.dll.config包含nuget安装过程插入的xml,用于重定向现有引用:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
Newtonsoft和SKGLExtension都不在GAC中
代码中的所有引用都将Require-Specific-Version标志设置为False
解决方案的包和用户的包文件夹都已清除。所有构建都以完全清理和重新构建的方式执行
如果我尝试将DLL从WPF安装复制到Excel安装,我们仍然会遇到同样的问题。在用尽了我们的选项后,不幸的是,我们不得不删除对SKGLExtension包的nuget引用。幸运的是,我们能够根据Newtonsoft.Json包版本11从源代码处编译SKGL库,解决了这个问题。找到一个更好的解决方案会很好,不过我认为可以用新的Nuget包来解决,它确保Skglextision引用的是Nuget版本的Newtonsoft.Json,而不是先前的本地包
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>