.NET Frameworkのバージョンに関するMSDNページから、各バージョンには以前のバージョンのすべての機能が含まれていることがわかります。
以前のバージョンの.NETFrameworkとは異なり、.NET Framework 4では、以前のバージョンの.NET Frameworkがインストールされていない場合、以前のバージョンの.NETFrameworkで構築されたアプリケーションを前方に移行して実行することはできません。
何故ですか?
.NET Frameworkのバージョンに関するMSDNページから、各バージョンには以前のバージョンのすべての機能が含まれていることがわかります。
以前のバージョンの.NETFrameworkとは異なり、.NET Framework 4では、以前のバージョンの.NET Frameworkがインストールされていない場合、以前のバージョンの.NETFrameworkで構築されたアプリケーションを前方に移行して実行することはできません。
何故ですか?
他の回答ですでに説明したように、これらは異なるランタイムであるため、.NET 3.5で使用される2.0ランタイムがインストールされていないため、デフォルトではアプリケーションはサポートされていません。
ただし、以下をアプリケーション構成に追加して、アプリケーションに.NET4.0ランタイムの使用を強制することができます。
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
ただし、これにより、異なるランタイム間の変更が原因でアプリケーションがクラッシュする可能性があるため、アプリケーションが対象とするランタイムを使用するのが最も安全です。
デフォルトでは、異なるランタイムが必要です。
3.5アプリケーションのランタイムは2.0ランタイムであり、4.0ランタイムとは互換性がありません。
JoãoAngeloが彼の答えで説明しているように、リターゲットすることができます。
以前のバージョンの.NETFrameworkとは異なり、.NET Framework 4では、以前のバージョンの.NET Frameworkがインストールされていない場合、以前のバージョンの.NETFrameworkで構築されたアプリケーションを前方に移行して実行することはできません。
それらは機能しますが、.NET4ランタイムを使用して実行することを明示的に許可する必要があります。フレームワークには新しいランタイムがあるため、アプリケーションが古いバージョンをターゲットにしている場合は、これを許可することを選択する必要があります。
これを行うには、アプリの構成で適切なsupportedRuntime変数を指定します。
<configuration>
<startup>
<supportedRuntime version="v4.0"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
</configuration>
これがないと、ランタイムは次のことを行います。
要素がアプリケーション構成ファイルに存在しない場合は、アプリケーションのビルドに使用されたランタイムのバージョンが使用されます。
CLR 2でビルドしたため、2.0ランタイムのみが許可され、ユーザーが.NET3.5sp1を持っていない場合は失敗します。