替换应用程序中的DLL

时间:2017-12-18 16:23:59

标签: c# .net windows

我们的客户拥有一个应用程序,该应用程序使用我们的某个供应商开发的dll与设备进行交互。我们必须替换这个dll,因为我们想要发布一个新设备,但是我们的客户端不想重新编译,因为他不想拥有同一个应用程序的两个版本。如何在没有程序集引用错误的情况下替换DLL?

感谢。

1 个答案:

答案 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>