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

时间:2011-08-01 12:42:15

标签: c# .net visual-studio-2010 clr gac

我有一个关于2个CLR版本的问题,即.NET框架的版本2和版本4,它们使用不同的GAC位置。我有一个客户端应用程序,它引用了v2 GAC(C:\ Windows \ Assembly)中的程序集“X”。我现在正在更新程序集“X”以在.NET框架的v4(C:\ Windows \ Microsoft.NET \ assembly)上运行,但是,我不想重新编译客户端应用程序。请注意,在安装到v4 GAC之前,会从v2 GAC中删除程序集“X”。

是否可以创建一个发布者策略文件,该文件将以前驻留在CLR版本2中的程序集重定向到CLR的版本4?如果是这样,这是如何实现的?

我搜索了MSDN,并了解assemblyBinding元素上有一个applyTo字段,您可以在其中指定.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" />

这样的混合加上出版商的政策就足够了,还是有另一种方式?

1 个答案:

答案 0 :(得分:1)

此处的决定因素是您的客户端应用运行的CLR版本。如果它是v2那么你无法做任何事情来使v4程序集可用或甚至可见。如果它确实在v4 CLR下运行,那么它将首先自动尝试解析v4 GAC中的程序集引用。

好消息是,您无需重新编译客户端应用程序即可实现这一目标。您可以通过将其添加到应用程序的配置文件中来强制它在.Net 4下运行:

<configuration>
  <startup>
    <supportedRuntime version="v4.0" />
  </startup>
</configuration>

这可以给你你想要的东西。