我有一个在 GAC 中注册了几个版本的程序集。现在,我希望使用此程序集(版本 1.3)的一位客户指向最新版本(1.4),而无需打开源代码并重新编译客户端。
我看到一篇文章演示了使用应用程序配置文件(winform 应用程序)这样做的技术
配置文件内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:asm="urn:schemas-microsoft-com:asm.v1">
<runtime>
<asm:assemblyBinding>
<!-- one dependentAssembly per unique assembly name -->
<asm:dependentAssembly>
<asm:assemblyIdentity
name="MyFacade"
publicKeyToken="c9c18e16df1654e0" />
<!-- one bindingRedirect per redirection -->
<asm:bindingRedirect oldVersion="1.3.0.0"
newVersion="1.4.0.0" />
</asm:dependentAssembly>
</asm:assemblyBinding>
</runtime>
</configuration>
如您所见,版本 1.3.0.0
有一个绑定(bind)重定向至 1.4.0.0
用于名为 MyFacade
的程序集.
现在,这种方法只有一个小问题。它不起作用:)
我确定这与我的代码有关。
有什么建议吗?
谢谢,
阿迪巴尔达
最佳答案
首先, this is the best source 我发现了这个主题。有一些不同,例如,他们没有使用 asm:
命名空间,此外,您可能希望通过添加 <publisherPolicy apply="no" />
来禁用发布者策略如文章所述。
在我们之前的一个项目中,我们需要更多的控制,所以我们需要捕捉 AppDomain.AssemblyResolve Event 并路由到我们想要的任何程序集。 Here您可以找到有关该概念的更多信息。不过,您必须对您的应用进行一次操作。
关于C# 如何使用应用程序配置文件重定向程序集加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2942767/