2011-08-01 11 views
0

異なるGACの場所を使用する2つのCLRバージョン(.NET Frameworkのバージョン2とバージョン4)に関する質問があります。私はv2 GAC(C:\ Windows \ Assembly)からアセンブリ "X"を参照するクライアントアプリケーションを構築しました。私は現在、アセンブリ "X"を.NETフレームワーク(C:\ Windows \ Microsoft.NET \ assembly)のv4で実行するように更新していますが、クライアントアプリケーションを再コンパイルしたくありません。 v4 GACをインストールする前に、アセンブリ "X"がv2 GACから削除されていることに注意してください。アセンブリバージョンを別のCLR/GACにリダイレクトする

CLRのバージョン2にあったアセンブリをCLRのバージョン4にリダイレクトするパブリッシャポリシーファイルを作成することはできますか?もしそうなら、これはどのように達成されますか?

私はMSDNを検索しましたが、.NET Frameworkのバージョンを指定できるassemblyBinding要素にapplyToフィールドがあることを理解していますが、これはバインド全体を網羅しているようです。私が望む何

のようなものです:

<bindingRedirect oldVersion="1.0.0.0" .Net 2 newVersion="2.0.0.0" .Net 4/> 

私はCLRのバージョン2.0のアプリケーションは、現在GACにCLR v4.0のアセンブリを見ることができないことをここhttp://msdn.microsoft.com/en-us/magazine/dd727509.aspxを読みました。ただし、使用して更新CLRを使用するアプリを強制することができます

<startup useLegacyV2RuntimeActivationPolicy="true"> 
<supportedRuntime version="v4.0" /> 

だからこれの混合物を加えた発行者ポリシーで十分で、または別の方法があるのでしょうか?

答えて

1

ここで決定要因は、クライアントアプリケーションが実行されているCLRのバージョンです。それがv2の場合、v4アセンブリを使用可能にするか、またはそれを可視化するために何もできません。それがv4 CLRのもとで実行される場合、v4 GACのアセンブリ参照を自動的に解決しようとします。

これを実現するためにクライアントアプリケーションを再コンパイルする必要はありません。あなたは、単にアプリケーションの設定ファイルにこれを追加することにより、ネット4の下で実行するように強制することができます

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

これは、あなたが望んでいた何を与える必要があります。

+0

ありがとうございます。我々は、GACでアセンブリをインターフェイスするように構築された現場のクライアントを持っているので、新しいバージョンのアセンブリを(追加しないで置き換えることによって)リリースするとき、新しいバージョンに対して強制的に再コンパイルする必要はありませんリダイレクトにパブリッシャポリシーアセンブリを使用する理由クライアントアプリケーションの再コンパイルを避けるのは良いことです。しかし、これは、クライアントがapp.configを持つことを保証する必要があることを意味し、説明したように新しいアセンブリをリリースするときにv4ランタイムをサポートするようにこれらを更新することを忘れないでください。出版社の方針がこれに対処できればいいですね! – Jeb

+0

最新のCLRですべてのアプリケーションを強制的に実行できるレジストリ設定があります。この回答を参照してください:http://stackoverflow.com/questions/2094694/launch-powershell-under-net-4/2096906#2096906それが実現可能かどうかは分かりませんが、各クライアント用にApp.configを用意する必要はありません(ただし、GPOなどを使ってレジストリ設定を自動化することができれば)! – mthierba

関連する問題