在不重新编译项目的情况下升级C#项目中的引用dll

时间:2009-09-22 17:52:22

标签: c# dll reference version assembly-resolution

我需要使用C#应用程序的内置版本并更改其中一个引用dll。最好的方法是什么,我在参考dll上关闭了特定版本,但是当我测试用新版本替换dll时,我得到“无法加载文件或程序集XXXXX,版本= XXXXX。是有没有办法阻止加载器关心dll的版本,所以dll只会尝试加载?

1 个答案:

答案 0 :(得分:18)

是的,您可以这样做 - 请参阅MSDN文章Redirecting Assembly Versions

您应该阅读整个文档,但它主要涉及程序集的发布者创建“发布者策略文件”或消费者将bindingRedirect添加到app.config文件,如下所示(直接从文章):

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <dependentAssembly>
         <assemblyIdentity name="myAssembly"
                           publicKeyToken="32ab4ba45e0a69a1"
                           culture="en-us" />
         <bindingRedirect oldVersion="1.0.0.0"
                          newVersion="2.0.0.0"/>
       </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

一些注意事项:

  • 如果您没有明确指定 你的文化(许多人没有),它会 “中立”而不是“恩惠”。

  • 如果您还不知道,可以 获取程序集的公钥令牌 使用强名称实用程序,如 这:sn -t [AssemblyPath]