【发布时间】:2009-09-22 17:52:22
【问题描述】:
我需要使用 C# 应用程序的构建版本并更改其中一个引用 dll。最好的方法是什么,我在参考 dll 上关闭了特定版本,但是一旦我测试用较新版本替换 dll,我得到“无法加载文件或程序集 XXXXX,版本 = XXXXX。是有没有办法阻止加载器关心 dll 的版本,所以 dll 只会尝试加载?
【问题讨论】:
标签: c# dll reference version assembly-resolution
我需要使用 C# 应用程序的构建版本并更改其中一个引用 dll。最好的方法是什么,我在参考 dll 上关闭了特定版本,但是一旦我测试用较新版本替换 dll,我得到“无法加载文件或程序集 XXXXX,版本 = XXXXX。是有没有办法阻止加载器关心 dll 的版本,所以 dll 只会尝试加载?
【问题讨论】:
标签: c# dll reference version assembly-resolution
是的,您可以这样做 - 请参阅 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]
【讨论】:
Publisher Policy File 从我的C# WinForms 应用程序中引用任何版本的Microsoft.Office.Interop.PowerPoint 程序集吗?