219

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

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

グーグルで解決策を見つけました。これは、これをアプリケーション構成に追加することです。

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

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

4

2 に答える 2

166

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

最近目にした問題の 1 つは、side-by-side ランタイムのサポートにより、.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 の読み込みに戻ります。

于 2009-11-17T23:36:04.910 に答える
127

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

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

[.NET のインストール] v4 は「影響なし」です。インストール時に既存のコンポーネントの動作を変更するべきではありません。

基本的に、useLegacyV2RuntimeActivationPolicy 属性を使用すると、「レガシー shim API に依存関係があります。選択したランタイムに関して、以前と同じように動作するようにしてください。」</p>

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

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

于 2010-03-18T02:39:40.313 に答える