2009-10-23 4 views
6

C#4.0コンパイラで作成されたILをCLR 2.0で実行できますか?明確にするためにC#4.0コンパイラで作成したILをCLR 2.0で実行できますか?

は、私はマルチターゲットVS 2010(VSは、右のコンパイラのバージョンを選択した場合)について尋ねていないよ、私はcsc.exe 4.0は、マルチターゲットをサポートしているかどうかを知りたい...

答えて

7

他のすべてが失敗した場合は、試してみてください。私はちょうどVS2010b2に次のようにテストしてみた、2.0をターゲットにコンパイル:

using System;  
class Program { 
    static void Main() { 
     Write(); 
     Write(msg: "world"); 
     Console.ReadLine(); 
    } 
    static void Write(string msg = "Hello") { 
     Console.WriteLine(msg); 
    } 
} 

これは、.NET 2.xの/ 3にも存在しているメタデータを使用する2つの新しいC#4.0 言語機能を使用しています.x/CLR 2;私の通常の(CLR 2)マシンで正常に実行されます(私のVS2010b2はVMです)。だから、私は「はい、いくつかの機能のために」と結論づけます。明らかに、フレームワーク依存の機能(dynamicなど)を使用すると、それほどうまく終了しません。

編集:あなたのコメント;私はcscをコマンドラインで試しましたが、デフォルトではこののターゲットCLR 4になります。私はCLR 2をターゲットにすることができるかどうかを調べようとします(VSのように)。残念ながら、それはもはや...

更新ビルド出力ウィンドウに(偽造、ところで)コマンドラインが含まれています。いくつかの「内情に通じ」人をして戻って来なかった:

パス/ nostdlibとA 2.0 mscorlib.dllへの参照。

そして案の定:

C:\Windows\Microsoft.NET\Framework\v4.0.21006>csc /nostdlib /reference:%SystemRo 
ot%\microsoft.net\framework\v2.0.50727\mscorlib.dll /out:c:\my.exe /target:exe " 
C:\Users\Marc\Documents\Visual Studio 2010\Projects\ConsoleApplication6\ConsoleA 
pplication6\program.cs" 
Microsoft (R) Visual C# 2010 Compiler version 4.0.21006.1 
Copyright (C) Microsoft Corporation. All rights reserved. 
正常に動作します

(exeファイルは私の非4.0のマシン上で動作します)。クレジット:Kevin Pilch-Bisson

1

C#4.0 .NET CLR 4.0を使用しているため、CLR 2.0とのバイナリ互換性はありません。あなたは2.0フレームワークをターゲットにすることができます。

+0

バイナリ比較可能性は何ですか? –

+0

ボブは「互換性」と言うことを意味しました –

+0

ハハ正しいエド、スペルチェックに頼ることができないときはスペルできません。ありがとう! – Bob

1

コンパイラによって異なります。

これまでのところ、C#4.0コンパイラは.NET 2.0ランタイムをターゲットとし、そのランタイムと互換性のあるILを生成し、.NET 2.0でも実行されるアセンブリのみを参照できることを示しています。

ターゲティングは選択肢ですが、他のコンパイラでも同じ機能が保証されるわけではありません。

ほとんどの場合、コンパイラを実装するチームによって決定されると思います。

たとえば、C#とVB.NETのコンパイラチームは、マルチターゲット化をサポートしている可能性があります(ただし、VSは別のターゲットに対して異なるコンパイラを選択するVisual Studioの機能として残しています)。

.NETフレームワークを使用している他のベンダーも、他の決定を下す可能性があります。

+0

私は、私はC#4.0コンパイラではなくVS.について特に尋ねた理由です、csc.exe 3.5でCLR 2.0をターゲットにすることができます知っていますVS 2010は現在ベータ2ですので、あなたはそれについてはわかりませんが、私はmutitargetingをサポートする決定が行われたと思います... –

関連する問題