如何解决?
我有2个第三方程序集,它们使用NewtonSoftJson.dll。 catch是其中一个使用较旧的3.x.x而另一个使用4.5.x.所以在运行时,两个组件中至少有一个抱怨另一个。
我该如何解决这个问题?我可以设置服务,但代码和环境目前没有这样设置。在给定的时间内,它也可以安全地完成重构。
答案 0 :(得分:3)
微软文章“Redirecting Assembly Versions”有这样的说法:
以下示例显示如何重定向myAssembly的一个版本 到另一个,并关闭mySecondAssembly的发布者政策。
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<!-- Assembly versions can be redirected in application,
publisher policy, or machine configuration files. -->
<bindingRedirect oldVersion="1.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="mySecondAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<!-- Publisher policy can be set only in the application
configuration file. -->
<publisherPolicy apply="no" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
答案 1 :(得分:2)
通常,您可以通过app / web配置中的配置解决此问题。您可以使用探测元素指定专用路径,并将两个版本放在不同的文件夹中:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
另一种方法是使用程序集绑定重定向。但这只有在您知道版本兼容的情况下才有效。由于您没有直接使用它们,我不确定您是否知道这一点,并且发布者通过更改程序集版本表明存在一些不兼容性。
答案 2 :(得分:1)
使用反编译器结束,将项目添加到解决方案,引用新dll,修复错误并重新编译,指向最近添加的项目。
由于公钥标记已更改,因此无法使用程序集重定向。显然,使用不同的密钥来编译其中一个引用的程序集。不得不采取更激烈的措施。