将程序集版本重定向到不同的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框架的版本,但这似乎包含整个绑定。

我想要的是:

 

我在这里阅读http://msdn.microsoft.com/en-us/magazine/dd727509.aspx,CLR v2.0应用程序现在无法在GAC中看到CLR v4.0程序集。 但是,您可以强制应用程序使用更新的CLR:

   

那么这个加上出版商政策的混合物是否足够,还是有另一种方式?

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

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

      

这应该给你你想要的。