将程序集版本重定向到不同的CLR/GAC
本文关键字:CLR GAC 程序集 版本 重定向 | 更新日期: 2023-09-27 18:04:13
我有一个关于两个CLR版本的问题,即。net框架的版本2和版本4,它们使用不同的GAC位置。我建立了一个客户端应用程序,它引用了v2 GAC (C:'Windows' assembly)中的程序集"X"。我现在正在更新程序集"X"以在。net框架(C:'Windows'Microsoft.NET'assembly)的v4上运行,但是,我不想重新编译客户端应用程序。注意,在安装到v4 GAC之前,组件"X"从v2 GAC上移除。
是否可以创建一个发布者策略文件,将过去驻留在CLR版本2中的程序集重定向到CLR版本4 ?如果有,如何实现?
我搜索了MSDN,并了解到在assemblyBinding元素上有一个applicesto字段,您可以在其中指定. net框架的版本,但这似乎包含了整个绑定。
我想要的是:
<bindingRedirect oldVersion="1.0.0.0" .Net 2 newVersion="2.0.0.0" .Net 4/>
我在这里读到http://msdn.microsoft.com/en-us/magazine/dd727509.aspx, CLR v2.0应用程序现在无法在GAC中看到CLR v4.0程序集。但是,你可以使用以下命令强制应用使用更新后的CLR:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" />
那么,将此与发行商策略结合起来是否就足够了,或者是否存在其他方法?
这里的决定因素是您的客户端应用程序在哪个CLR版本下运行。如果它是v2,那么没有什么可以做,以使v4程序集可用或甚至可见。如果它确实在v4 CLR下运行,那么它将自动尝试首先解析v4 GAC中的程序集引用。
好消息是,你不需要重新编译你的客户端应用程序来实现这一点。你可以通过在应用程序的配置文件中添加以下内容来强制它在。net 4下运行:
<configuration>
<startup>
<supportedRuntime version="v4.0" />
</startup>
</configuration>