我们的客户拥有一个应用程序,该应用程序使用我们的某个供应商开发的dll与设备进行交互。我们必须替换这个dll,因为我们想要发布一个新设备,但是我们的客户端不想重新编译,因为他不想拥有同一个应用程序的两个版本。如何在没有程序集引用错误的情况下替换DLL?
感谢。
答案 0 :(得分:3)
为此起作用:
原始dll不应该是signed,否则您将无法为替换提供完全相同的标识(因此引用程序集将无法识别替换)。解决这个问题的唯一方法是使用供应商使用的相同snk(强名称密钥)文件签署您的替换文件 - 也就是说他们必须提供他们的snk文件,这是非常不可取的(任何供应商都愿意这样做)应该避免!)。
替换dll需要提供与原始dll相同的公共API。
替换dll应该与原始版本号相同,或者您应该在应用程序的配置文件中使用bindingRedirect告诉.Net使用不同的版本号加载新的dll:
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="myAssembly"
publicKeyToken="32ab4ba45e0a69a1"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0"
newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>