.NET 4構成で「useLegacyV2RuntimeActivationPolicy」は何をしますか?


214

SlimDXを使用しているためにアンマネージコードを含むプロジェクトを.NET 4.0に変換すると、次のエラーが発生しました。

混合モードアセンブリは、ランタイムのバージョン 'v2.0.50727'に対してビルドされており、追加の構成情報がないと4.0ランタイムにロードできません。

グーグルで私に解決策を与えました、これはアプリケーション設定にこれを追加することです:

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

私の質問は、何をしuseLegacyV2RuntimeActivationPolicyているのですか?それに関するドキュメントが見つかりません。

回答:


165

少し時間をかけて(さらに検索して)、Jomo Fisherによるこのブログエントリを見つけました。

最近発生した問題の1つは、サイドバイサイドランタイムのサポートにより、.NET 4.0が古い混合モードアセンブリへのバインド方法を変更したことです。これらのアセンブリは、たとえば、C ++ \ CLIからコンパイルされたものです。現在利用可能なDirectXアセンブリは混合モードです。このようなメッセージが表示された場合、問題が発生していることがわかります。

混合モードアセンブリは、ランタイムのバージョン「v1.1.4322」に対してビルドされており、追加の構成情報がないと4.0ランタイムにロードできません。

[をちょきちょきと切る]

アプリケーションの良いニュースは、app.configフラグを次のように設定することで、これらのアセンブリの.NET 2.0時代のバインディングにフォールバックするオプションがあることです。

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

したがって、ランタイムが混合モードアセンブリをロードする方法が変更されたようです。この変更の詳細や、なぜ変更が行われたのかわかりません。ただし、useLegacyV2RuntimeActivationPolicy属性はCLR 2.0の読み込みに戻ります。


28
一方、markliosの回答(stackoverflow.com/questions/1604663/…)は、この変更に関する彼の詳細な説明へのリンクを提供していることに注意してください。
Steffen Opel

1
これについての詳細な説明は、MSDNで確認できます(上記の解決策については明示的に言及していません):msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

これをアプリケーションの構成とUnitTestプロジェクトの構成の両方に追加しても、テストの実行時にファイルの読み込みエラーが発生します。新しい質問を投稿する必要がありますか?
CodenameCain

126

この属性に関する情報の欠如を助けるために私が最近書いた説明は次のとおりです。 http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx(インターネットアーカイブウェイバックマシンのリンク)

最も関連性の高いビットを引用するには:

[.NETのインストール] v4は「影響なし」です。インストール時に既存のコンポーネントの動作を変更しないでください。

useLegacyV2RuntimeActivationPolicy属性を使用すると、基本的には次のように言うことができます。「レガシーシムAPIにはいくつかの依存関係があります。選択したランタイムに関して、以前と同じように動作するようにしてください。」

これをデフォルトの動作にしないのはなぜですか?この動作はより互換性があり、以前のバージョンからのコードの移植がはるかに簡単になると主張するかもしれません。思い出すと、v4のインストールに影響を与え、マシンにインストールされている既存のアプリを破壊する可能性があるため、これはデフォルトの動作にはなりません。

完全な投稿はこれをより詳細に説明しています。RTMでは、これに関するMSDNドキュメントの方が優れているはずです。


user20493、環境変数COMPlus_CLRLoadLogDirを空のディレクトリに設定してアプリを実行し、アプリが書き込みアクセスして結果のログを共有できるようにしますか(共有する前にPIIをスクラブしてください)。何が起こっているのかを説明するのに役立ちます。config属性は、アプリが実行されているコンテキストに適用されない場合があります。
Mark Miller

このリンクは、問題が何であり、解決策があなたのために何をしているかを理解するのにも役立ちます:msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.