2012-03-20 10 views
8

Oczekuję, że aktualizacje poziomu szkieletowego (takie jak asynchroniczne) nie będą mogły być skompilowane do pracy w niższej strukturze, ale będą się różnić kompilatorom (np. zakres zmiennej pętli foreach) działa poprawnie po skompilowaniu z C# 5.0 przeciwko .net 4.0? Czy ktoś może podać ostateczną listę? Które funkcje języka C# 5.0 można skompilować do uruchomienia na .net 4.0

Edit:

Zamiast poprosić o ostatecznym wykazie, który biorę z powrotem za dużo, aby zapytać, czy ktokolwiek będzie w stanie odpowiedzieć, czy zmiany poziomu kompilatora (jak foreach zakres zmiennej) będzie zachowywać inaczej, gdy używa się C# 5.0 w stosunku do wcześniejszej wersji framework.

+2

asynchroniczny działa na 4,0, http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=9983, jest to tylko zmiana kompilatora, wynik il działa na .net 4.0 –

+0

Zazwyczaj nowsza składnia będzie ograniczona do "bieżącego "ramy. Funkcje takie jak (aktualna) wersja Async CTP będą nadal działać. Microsoft oczywiście jeszcze nie sugeruje używania Async CTP w kodzie produkcyjnym. Wszystko, co jest prostą cechą samego 4.5, prawdopodobnie nie zostanie przeniesione przez Microsoft (nie ma sensu) w tym momencie Nie wierzę, że zmieniają one kompilator tak, jak zrobili to po zmianie z .NET Framework 3.5 SP1 –

Odpowiedz

4

Wszystkie z nich. Nie ma nic, co naprawdę wymaga nowej obsługi runtime - niektóre funkcje wymagają tylko nowych bibliotek. Ale nie ma wymogu, aby skompilować go z bibliotekami .NET 4.5 - możesz również zapewnić własną implementację tego samego interfejsu API.

Na przykład, dodaj poniższy plik do projektu, aby umożliwić obsługę async/czekają w .NET 4.0 projekty: https://gist.github.com/1961087

nie próbowałem go z rozmówcą informacji atrybutów, ale jestem prawie pewien, te będą działać, nawet jeśli sam je zdefiniujesz, zamiast używać tych, które są dostarczane z .NET 4.5.

Ten sam trik działa z class ExtensionAttribute w C# 3, aby użyć metody rozszerzenie z .NET 2.0, a można nawet użyć pełnych LINQ-obiekty w .NET 2.0 (LinqBridge)

3

Jeśli chodzi o funkcje, każda składnia działająca w wersji 4.0 może zostać skompilowana w wersji 4.0, nawet jeśli została oryginalnie utworzona w wersji 5.0. Program Visual Studio 11 poinformuje Cię o kodzie, który nie będzie działał w wersji 4.0, jeśli zmienisz wersję .NET Framework we właściwościach projektu, więc byłby to mój przewodnik. Jeśli kompilacja do 4.0 jest problemem, użyj VS 11 do edycji, ale pozostaw zgodność ze standardem 4.5.

Prawdopodobnie niektóre nowsze wersje FUD zostaną skompilowane do starszej wersji. Było to prawdą w poprzednich wcieleniach, ale użycie nowej składni jest chybione, lub spróbuj skompilować wstecz.

Nie znam pełnej listy funkcji językowych (słów kluczowych i innych) i nie znalazłem żadnej z wyszukiwarką. Nie widziałem również specyfikacji języka 4.5 na wolności.

+2

.NET 4.5 i C# 5.0. OP wyraźnie zapytał o C# 5.0, więc zastosował poprawną wersję. –

+0

Poprawione. Dzięki. –

+0

@GregoryABeamer Dziękuję za odpowiedź, częścią mojego głównego pytania (przypuszczam) jest tak naprawdę to, czy poziom kompilatora się zmienia (jak foreach varaible scope) "skompiluje się" do wcześniejszej .net czy kompiluje się z wcześniejszymi przełącznikami wersji szkieletu wyłączyć te ulepszone funkcje. –

Powiązane problemy