.net Excel加载项';通过MSI安装时,s导入的Nuget包未绑定到引用的.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:'无法加载文

我们最近更新了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中的这行代码:

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,而不是先前的本地包


Hi-Artem,4.0.4版本解决了这个问题,但后来的版本又回到了v6要求,再次出现了这个问题。
<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>