web-dev-qa-db-ja.com

.NET 2.0でビルドされたC#アプリケーションを.NET 4.0 / 4.5で実行できるようにする

.NET 2.0 Framework(VS2005)で構築されたC#DLL(myapp.exeと呼びましょう)がありますが、アプリケーションは.NETのみのマシンでは機能しないことがわかりました。 4.0以降がインストールされています。アプリケーションを.NET4.0で動作させるために、この記事に従ってmyapp.exe.configに次の行を追加しました 。NET FrameworkV4.0のインストールと.NET2.0 /3.0の実行/3.5/3.5Sp1アプリケーション

<startup>
  <supportedRuntime version="v4.0.30319"/>    
</startup>

そしてそれは働いています。

次に、この記事が次のことにも言及していることを確認しました(特に2番目の段落)。

さて、3.5 Service Pack 1アプリケーションだけをV4.0 CLRで実行することはできないことを知っていました。アプリケーションを曲げてV4.0CLRで実行するには、V2.0 CLRを使用するか、タグを使用して再構成する必要があります。その曲げは、やりたくないことかもしれません。

しかし、私が気付いていなかったのは、.NET 4.0をインストールしても、2.0/3.0/3.5 /3.5Sp1アプリケーションに必要なビットがインストールされないということでした。 V4.0 CLRとV4.0アセンブリのみがインストールされ、.NET Framework V3.5 Sp1に相当するものは追加インストールされません。したがって、.NET 4.0とともに.NET Framework V3.5 Sp1を自分でインストールする必要があります。

私のテストから、2.0 C#アプリケーションを.NET 4.0フレームワーク(4.0アセンブリ/ライブラリ)を使用して.NET 4.0で実行できることを意味します。これは、記事の内容と矛盾しています。

または、ここで何か不足していますか?誰かがこれについて明確にできればそれは役に立ちます。マイクロソフトはこれをまったく明らかにしていません。

16
windfly2006

私のテストから、2.0 C#アプリケーションを.NET 4.0フレームワーク(4.0アセンブリ/ライブラリ)を使用して.NET 4.0で実行できることを意味します。これは、記事の内容と矛盾します。

can .NET4アセンブリを使用して.NET4でアプリケーションを実行します。ただし、開発に使用したのと同じランタイムとフレームワークを使用しないため、ランタイムの動作にわずかな変更が生じる可能性が常にあります。この記事は、4.0をインストールするだけではまったく同じ動作が得られないことを示唆していると思われますが、これまで見てきたように、動作するはずです。

これを行うことはおそらく問題ありませんが、これが標準のデプロイメントオプションになる場合は、アプリケーションの徹底的なテストを行うことをお勧めします。

6
Reed Copsey

そして私は引用します:

「.NETFramework4は、.NET Frameworkバージョン1.1、2.0、3.0、および3.5で構築されたアプリケーションと下位互換性があります。つまり、以前のバージョンの.NETFrameworkで構築されたアプリケーションとコンポーネントは.NETFramework4。」

。NET Frameworkのバージョン互換性 から取得

あなたはApp.configファイルで正しい考えを持っていますが、あなたは本当に1行であなた自身を制限しています。
supportedRuntime行のよりリベラルな使用を提案できますか?

例えば:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <!-- 
    <supportedRuntime version="v3.5"/>  "The .NET Framework version 3.0 and 3.5 use version 2.0.50727 of the CLR."  
    -->
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.1" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.2" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3,Profile=Client" />
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0.3" /> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

なぜsupportedRuntime version="v3.5"コメントアウト?この構成は、アプリケーションが互換性のある共通言語ランタイム(CLR)のバージョンを識別することを忘れないでください。 CLRの3.0または3.5バージョンはありません。 。NET Frameworkのバージョンと依存関係 を参照してください。

10
Okuma.Scott

もう少し簡潔にするために。 App.configで、CLRのサポートを示しています。 .Net v2以降では、 CLRの2バージョン のみです。したがって、以下は.Netv2以降のサポートを提供します。プロジェクトでビルドされたexe.configファイルを必ず含めてください。そうしないと、.Netのインストールを求めるポップアップが引き続き表示される可能性があります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v2.0.50727"/>
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

.Net v2からv3.5をサポートするには、以下を使用します。

<supportedRuntime version="v2.0.50727"/>

.Net v4.0から4.6をサポートするには、以下を使用します。

<supportedRuntime version="v4.0"/>

詳細については、 (。NET Frameworkをサポートするようにアプリを構成する

5
MJonas

差出人: Microsoftドキュメント

snapshot .net framework

app.configファイルの設定を選択できます。

1
Gour Gopal