2009-10-23 7 views

Odpowiedz

7

Jeśli wszystko inne zawiedzie, spróbuj. Właśnie przetestowane następujące w VS2010b2, opracowywane kierowania 2,0:

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

ta wykorzystuje dwa nowe C# 4.0 językowych funkcji, które korzystają z meta-danych, które są również obecne w .NET 2.x/3 .x/CLR 2; działa poprawnie na mojej zwykłej maszynie (CLR 2) (mój VS2010b2 to VM). Kończę więc "tak, dla niektórych funkcji". Oczywiście, jeśli użyjesz funkcji zależnej od struktury (dynamic itd.), To nie skończy się tak dobrze.

Edytuj: ponów swój komentarz; Próbowałem csc w wierszu polecenia, a domyślnie ten ma docelowy CLR 4; Spróbuję sprawdzić, czy uda mi się osiągnąć cel CLR 2 (tak jak VS oczywiście może). Niestety, to już nie obejmuje (sfałszowane, btw) wiersz poleceń w oknie wyjściowym build ...

Aktualizacja: niektóre „w wiem” ludzie wrócili z:

Przełęcz/nostdlib oraz odniesienie do pliku 2.0 mscorlib.dll.

I rzeczywiście:

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. 

działa dobrze (exe działa na moim non-4.0 maszyny). Kredyt: Kevin Pilch-Bisson

1

C# 4.0 używa .NET CLR 4.0, więc nie będzie kompatybilności binarnej z CLR 2.0. Będziesz jednak mógł kierować na framework 2.0.

+0

co to jest porównywalność binarna? –

+0

Bob chciał powiedzieć "kompatybilność" –

+0

haha ​​poprawić Ed, wiesz, że nie możesz przeliterować, gdy nie możesz polegać na sprawdzaniu pisowni. Dzięki! – Bob

1

To zależy od kompilatora.

Wskazania do tej pory wydają się wskazywać, że kompilator C# 4.0 będzie mógł kierować na środowisko wykonawcze .NET 2.0, generując IL, który jest zgodny z tym środowiskiem wykonawczym i zapewniając, że odwołujesz się tylko do zestawów, które działają również na .NET 2.0.

Pamiętaj, że kierowanie jest wyborem - i nie ma gwarancji, że jakikolwiek inny kompilator będzie miał tę samą funkcję.

Najczęściej myślę, że to decyzja, którą podejmie zespół wdrażający kompilator.

Na przykład prawdopodobne jest, że zespoły kompilatorów C# i VB.NET będą wspierać obsługę wielu języków (chociaż mogą się od tego odciąć i pozostawić je jako funkcję Visual Studio, w której VS wybiera różne kompilatory dla różnych celów).

Inni dostawcy korzystający z platformy .NET mogą podejmować inne decyzje.

+0

Wiem, że mogę skierować CLR 2.0 z csc.exe 3.5, dlatego zapytałem konkretnie o kompilator C# 4.0, a nie VS. VS 2010 to teraz wersja beta2, więc domyślam się, że decyzja o wspieraniu mutitaryzacji jest już zakończona, chociaż nie jesteś tego pewien ... –

Powiązane problemy