2011-07-18 9 views
1

私の.NETアプリケーションは、.NET SDKを提供するC++ MFCデスクトップアプリケーションへのプラグインとして実行されます。メインアプリケーションは、プラグインをロードする前に.NETのロードを担当します。私は、.NET 3.5に対する私のプロジェクトをコンパイルしていて、次のテストコードは正常に動作します:.NET 2.0の.NET 3.5機能を使用しています....それは動作していますか?

MainApp.WriteLine("MyPlugin running on .NET {0}.{1}", _ 
         System.Environment.Version.Major, _ 
         System.Environment.Version.Minor) 

    Dim data As Int32() = New Int32() {1, 1, 1, 1, 4, 4, 4, 4, 12, 12, 12, 12} 
    For Each distinctValue As Int32 In data.Distinct() 
     MainApp.Write(distinctValue.ToString() & ", ") 
    Next 

これはだけ右.NET 3.5上で実行する必要がありますLINQのコードはありますか?しかし、バージョンメッセージを出力するときに「.NET 2.0上で動作するMyPlugin」というメッセージが表示されます。

なぜ、これが動作していますか?

答えて

2

これは、.NETのコアバージョン2.0を報告しています。コアコードが同じなので、これは4.0まで更新されませんでした。

+0

えーえを、ので、どのように私は/実際/バージョンをテストするのですか? –

+2

*実際のバージョンはどれですか? .NETランタイムの*実際のバージョンは2.0です。 NET(3.0および3.5、サービスパックを含む)のそれ以降のバージョンは、ランタイム環境の新しいバージョンではなく、新しいライブラリといくつかのコンパイラトリックでした。あなたが気にしているのであれば、.NET 3.5のライブラリで定義されている型を使用してみてください。利用できない場合は例外がスローされます。 – Bevan

+0

*実際のバージョンは、ユーザーがダウンロードしてインストールしたバージョンと仮定します。現在、2.0,3.0,3.5,4.0となっている。それはマイクロソフトのWebページに表示されるバージョンなので、私の顧客が考えるバージョンです。だから誰か* only * 2.0がインストールされている場合、私は誰かが* 3.5 *がインストールされている場合、 "2.0"を読むメッセージが必要です "3.5"を読むメッセージが必要です。誰かが両方ともインストールされている場合、私はどちらが現在実際にロードされているか知りたいです。必要に応じてあなたのソリューションを使用しますが、例外を投げずにこの情報を得ることができないとは考えにくいです。 –

1

.net 3.5の一部の機能は構文的な砂糖のみであり、コンパイラは2.0ランタイムで実行できるMSILにコンパイルします。
開発マシンでVS 2008と.net 3.5だけが必要ですが、コンパイルされたアプリケーションを実行するマシンには2.0ランタイムだけが必要です。

ここSOで、この質問を参照してください:
What features of .NET 3.5 can be used in a .NET 2.0 application?

関連する問題