项目部署中,如何正确设置assemblyBinding?还是有另一种方法?

时间:2018-07-23 16:55:35

标签: visual-studio-2017 json.net app-config

我们已经有了带有Newtonsoft.Json版本8.0.3的部署服务器。

我构建了一个成为服务的应用程序(ConsoleApp)。 在我的ConsoleApp中,我引用了Newtonsoft.Json版本11.0.0。

我的应用引用了其他项目,这些项目也使用Newtonsoft.Json的不同版本。

部署应用程序时,我们仅将exe和配置复制到部署服务器。 如何确保我们的应用不会因为Newtonsoft.Json版本不兼容而失败?

我试图设置运行时部分以支持assemblyBinding:

<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>
        <dependentAssembly>
            <assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="Common.Logging.Core" publicKeyToken="af08829b84f0328e" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-3.4.1.0" newVersion="3.4.1.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

要使我的代码正常工作,我需要在本节中进行哪些更改?

注意:服务器上已经有Newtonsoft.Json 8.0.3。我们不能覆盖它,因为它是另一产品安装的一部分。

我的ConsoleApp引用了其他使用Newtonsoft.Json 7.0.1、10.0.5和11.0.0的项目。 当我构建exe和配置并将其复制到部署文件夹时,该应用程序会抱怨:

  

无法加载文件或程序集'Newtonsoft.Json,版本= 8.0.0.0,   文化=中性,PublicKeyToken = 30ad4fe6b2a6aeed”或其中之一   依赖性。找到的程序集的清单定义不   匹配程序集参考。 (来自HRESULT的异常:0x80131040)

还请注意,如果我在Visual Studio中更改bindingRedirect属性并进行编译,它将把它设置回原来的状态。

解决此问题的最佳方法是什么?

谢谢。

0 个答案:

没有答案