【问题标题】:Upgrade a reference dll in a C# project without recompiling the project在不重新编译项目的情况下升级 C# 项目中的引用 dll
【发布时间】:2009-09-22 17:52:22
【问题描述】:

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

【问题讨论】:

    标签: c# dll reference version assembly-resolution


    【解决方案1】:

    是的,您可以这样做 - 请参阅 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>
    

    几点说明:

    • 如果您没有明确指定 你的文化(很多人没有),它会 保持“中立”而不是“en-us”。

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

    【讨论】:

    • 那需要重新编译,不是吗?
    • 或者,操作系统只在运行时检查配置文件?
    • 在运行时检查这些 xml 文件。见msdn.microsoft.com/en-us/library/yx7xezcf(VS.71).aspx
    • @Michael - 的确,正如布赖恩所说。 :)
    • 我可以使用这个Publisher Policy File 从我的C# WinForms 应用程序中引用任何版本的Microsoft.Office.Interop.PowerPoint 程序集吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多