在不重新编译项目的情况下升级C#项目中的参考dll。

19

我需要获取一个已构建的 C# 应用程序并更改其中一个引用的 dll。如何最好地做到这一点?我的参考 dll 已关闭特定版本,但是当我尝试用新版本替换 dll 时,就会出现“无法加载文件或程序集 XXXXX,Version=XXXXX”错误。有没有办法让加载器不关心 dll 的版本,以便 dll 只会尝试加载?

1个回答

20
是的,您可以这样做-请参阅MSDN文章“重定向程序集版本”。您应该阅读整个文档,但它基本上涉及程序集的发布者创建'发布者策略文件'或使用者向app.config文件添加bindingRedirect,如下所示(直接从文章中复制):
<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>

几点说明:

  • 如果您还没有明确指定语言文化(许多人没有这样做),它将是“中立”的而不是“en-us”。

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


那需要重新编译,不是吗? - Michael Todd
2
这些 XML 文件在运行时进行了检查。请参阅 http://msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx - Brian
@Michael - 确实,就像Brian所说的那样。 :) - Jeff Sternal
我能否在我的C# WinForms应用程序中使用这个Publisher Policy File来引用任何版本的Microsoft.Office.Interop.PowerPoint程序集? - JohnB
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接