3

次の 3 つのシナリオ (exe の app.config ファイル内) の違いは何ですか?

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


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


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

私はそれに関するMSのドキュメントといくつかのブログを読みましたが、何が起こり、いつどれを使用するかはまだはっきりしていません。

編集
サードパーティのアプリケーションが CLR 2 でコンパイルされた (そしてレガシー COM も使用している) 状況があり、アプリケーション用に作成した許可された拡張機能は CLR 4 でコンパイルされています。そのため、アプリケーションの再コンパイルはオプションではありません。自分。3 つのシナリオの影響を知る必要があるだけです。

4

2 に答える 2

4

useLegacyV2RuntimeActivationPolicy 属性はちょっとした問題です。これを true に設定すると、.NET 4 プログラムは、バージョン 2.0.50727 のランタイムが必要であることをレジストリに明示的に示した混合モード (C++/CLI) または [ComVisible] .NET アセンブリを読み込むことができます。そのようなアセンブリがなくても違いはありません。かなりまれです。必要なときにエラーメッセージが表示されるので、使用しないのが賢明です。メッセージが次のような FileLoadException です。

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

次に適切に行うべきことは、そのようなアセンブリを .NET 4 を対象とするように再構築することです。最後に行うことは、その属性を使用することです。

最初の 2 つのスニペットで行ったように、CLR の複数のバージョンを提供する場合は、EXE がマニフェストで要求するものを取得します。最後のものは v4 バージョンを強制します。これは、CLR v2 でのみテストされたコードを別の .NET ランタイムで実行する可能性があることを意味します。これはほとんどの場合、良い結果をもたらします。v4 は v2 と非常に互換性があります。しかし、彼らは v4 のバグを修正する機会を利用しました。バグのある動作に誤って依存する可能性があります。もちろん非常にまれです。

于 2013-05-06T18:23:21.137 に答える
2

supportedRuntimeアプリケーション自体を実際に実行および実行するために使用するランタイムを指定します。これを に設定するとv4.04.0clr ランタイムを使用してアプリケーションが開始されます。追加するv2.0v4.0、CLR 2 または 4 ランタイムが実際にアプリケーションを実行できるようになると言っています。

このuseLegacyV2RuntimeActivationPolicyオプションは、CLR 4 ランタイムで実行されているアプリケーション内から CLR 2 ランタイムを対象とするアセンブリを読み込むときの動作を変更します。に設定するtrueと、4.0 ランタイムを使用して CLR 2 アセンブリが読み込まれます。これは主に、CLR 4 プロジェクト内で CLR 2 をターゲットとする混合モード アセンブリを読み込む場合に必要です。そうしないと、エラーが発生します。

于 2013-05-06T18:23:59.440 に答える