将程序集版本重定向到不同的CLR/GAC



我有一个关于两个CLR版本的问题,即。net框架的版本2和版本4,它们使用不同的GAC位置。我建立了一个客户端应用程序,它引用了v2 GAC (C:Windows assembly)中的程序集"X"。我现在正在更新程序集"X"以在。net框架(C:WindowsMicrosoft.NETassembly)的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>

最新更新