16

.NET 2.0 Framework (VS2005) でビルドされた C# DLL ( と呼びましょうmyapp.exe) があり、.NET 4.0 以降のみがインストールされているマシンではアプリケーションが動作しないことがわかりました。私たちのアプリケーションを .NET 4.0 で動作させるために、myapp.exe.configこの記事「Installing .NET Framework V4.0 and Running .NET 2.0/3.0/3.5/3.5Sp1 Applications」に従って、次の行をいくつか追加しました。

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

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

次に、この記事には次のことも記載されていることがわかりました (特に 2 番目の段落)。

ここで、3.5 Service Pack 1 アプリケーションをそのまま V4.0 CLR で実行することはできないことがわかりました。アプリケーションを曲げて V4.0 CLR で実行するには、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 を自分でインストールする必要があります。

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

それとも、ここで何か不足していますか? 誰かがこれについて明確にできると助かります。マイクロソフトはこれをまったく明確にしていません。

4

5 に答える 5

10

そして私は引用します:

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

.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 のバージョンと依存関係を参照してください。

于 2014-09-19T13:35:09.263 に答える
6

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

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

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

于 2012-11-19T19:59:18.503 に答える
-3

web.config を supportedRuntime version="v4.0.30319"/ に設定するだけでは不十分です。

実際に Visual Studio でプロジェクトを開き、そのターゲット フレームワーク (プロパティ -> ビルド) を 4.0 に変更し、ビルドされたソリューションを 4.0 クライアントに再デプロイする必要があります。2.0 と 4.0 の間でいくつかのシステム アセンブリが異なります (system.web など) - ただし、前の回答が示唆したように、下位互換性が提供されています。

クライアントに実際の「4.0 互換」バージョンを一貫して提供する唯一の方法は、4.0 ランタイムに対してコンパイルすることです。これには、サードパーティのオープン ソース ライブラリも 4.0 バージョンにアップグレードする必要があります。

于 2013-11-21T19:18:41.393 に答える