2017-03-08 18 views
39

Jakie są minimalne wymagania dla architektury .NET i wersji CLR do uruchamiania C# 7? Ponadto, czy potrzebuję VS 2017 do kompilacji C# 7?Wymagania C# 7 .NET/CLR/Visual Studio

+1

Dowolna wersja .NET 4.6.x jest w porządku. Roslyn jest open source, więc wszystko jest możliwe. Jeśli chcesz, aby ktoś zrobił to za Ciebie, pobierz VS2017. Zostało wydane wczoraj. Wersja społecznościowa jest bezpłatna. –

Odpowiedz

74

NIE trzeba kierować na platformę .NET 4.6 lub nowszą, która jest niepoprawna. Aby użyć krotki potrzebujesz pakietu System.ValueTuple NuGet. Bezpośrednio pod numerem https://www.nuget.org/packages/System.ValueTuple/ widać, że obsługuje on obsługę wersji 4.5 i nowszych, a w rzeczywistości obsługuje wersje 4.0 i nowsze. A jeśli chcesz zwariować, jeśli utworzysz własną klasę System.ValueTuple, która robi dokładnie to, co robi ten pakiet, będzie działać z powrotem na .NET 3.5 i prawdopodobnie również starsze. W przypadku typów "podobnych do zadania" potrzebny jest również pakiet NuGet, https://www.nuget.org/packages/System.Threading.Tasks.Extensions/. Ten pakiet działa również na .NET 4.5 i nowszych zgodnie z jego dokumentacją.

Inne funkcje C# 7 będą działać na platformie .NET 2 i wyższej, ponieważ są po prostu cukrem składniowym. Na przykład, po prostu napisał w .NET 2.0 i prawidłowo rzuca:

static void Main(string[] args) 
    { 
     string test = null; 
     string d = test ?? throw new ApplicationException("test"); 
    } 

Podobnie int.TryParse("123", out int i); działa dobrze w .NET 2.0.

Nie przetestowałem każdej funkcji C# 7, ale ogólnie rzecz biorąc, z wyjątkiem krotek (i związanych z nimi funkcji, takich jak dekonstrukcja), powinno działać w .NET 2.0 i wyższych, ponieważ większość z nich jest po prostu syntaktycznym cukrem . Biorąc to pod uwagę, tak, potrzebujesz VS2017 do kompilacji C# 7. Jestem pewien, że w pewnym momencie inne kompilatory będą obsługiwać C# 7, ale nie dzisiaj.

Cechy potwierdziłem pracę w .NET 2.0:

  • binarne literały
  • numeryczne Separatory
  • Inline out parametry
  • Korzystanie _ wyrzucić z parametrów
  • funkcje lokalne
  • Rodzaj oparte dopasowanie wzorców if (obj is int i) i case int i:
  • stały przebieg dopasowania if (i is 2)
  • Var porównywania wzorców if (i is var j)
  • Ref powraca
  • Rzuć wyrażenia
  • Expression korpus pobierające i ustawiające
  • Expression korpus konstruktorów i finalizatory
+1

Dlaczego upadek? Co jest niedokładne w mojej odpowiedzi? – dman2306

+1

Awansujcie ode mnie, ale warto przeczytać [tę odpowiedź] (http://stackoverflow.com/a/42675652/7122), ponieważ pakiet nuget jest potrzebny również dla nowych funkcji asynchronicznych. –

+0

@DavidArno Dziękuję, zapomniałem o tej funkcji. Zaktualizowałem także informacje o tym pakiecie bryłek. Niestety, tak wiele rzeczy "rozważano" dla C# 7, ciężko jest znaleźć listę dokładnie tego, co zostało zaimplementowane jako Uwagi do wydania dla VS2017 wydają się niekompletne, wspominając tylko o największych dodatkach do funkcji. – dman2306

1

Aby użyć pełna moc C# 7 z pudełka (bez odwoływania się do nugetów i tak dalej) potrzebujesz VS 2017 i .Net 4.7 jako struktura docelowa.

Powiązane problemy