Jak włączyć funkcję C # 6.0 w Visual Studio 2013?

201

Przeglądałem najnowsze funkcje wprowadzone w C # 6.0 i właśnie podążyłem za przykładem inicjalizatora właściwości auto,

class NewSample
{
    public Guid Id { get; } = Guid.NewGuid();
}

ale moje IDE nie rozpoznało składni.

Zastanawiam się, jak mogłem włączyć C # 6.0 w Visual Studio 2013. Korzystam ze struktury docelowej 4.5.1.

Hassaan
źródło
7
Nie sądzę, aby było to możliwe w 2013 roku. Spójrz zamiast VS 14 CTP lub podgląd VS 2015.
Jeroen Vannevel
Cóż, potrzebujesz najnowszego kompilatora, który nie jest częścią VS 2013, więc nie sądzę, że to możliwe.
Rufus L
2
Cóż, właśnie chcę się dowiedzieć, czy MS wydaje jakąkolwiek aktualizację, czy nie
Hassaan
1
@PauloMorgado Co oznacza „to” w „tej wersji jest nieaktualna”? 4.5.1, VS2013 lub VS2014CTP?
ProfK
2
Czy możesz zaktualizować odpowiedź na to pytanie do @Deef
Chris

Odpowiedzi:

64

Informacje na temat przestarzałego oprogramowania w wersji wstępnej:

Zgodnie z tym jest to tylko instalacja i przejdź do Visual Studio 2013:

W rzeczywistości instalacja kompilatora C # 6.0 z tej wersji wymaga niewiele więcej niż instalacji rozszerzenia Visual Studio 2013, które z kolei aktualizuje pliki docelowe MSBuild.

Więc po prostu pobierz pliki z https://github.com/dotnet/roslyn i jesteś gotowy do pracy.

Musisz wiedzieć, że jest to nieaktualna wersja zaimplementowanych tam specyfikacji, ponieważ nie aktualizują one już pakietu Visual Studio 2013 :

Możesz także wypróbować kwietniowy podgląd użytkownika końcowego, który instaluje się na Visual Studio 2013. (uwaga: ten podgląd VS 2013 jest dość nieaktualny i nie jest już aktualizowany)

Więc jeśli chcesz korzystać z najnowszej wersji, musisz pobrać Visual Studio 2015 .

Patrick Hofman
źródło
7
niestety podgląd użytkownika końcowego dla 2013 został zamknięty :(
Hassaan
4
Żeby się upewnić, że nie ma obsługiwanego sposobu pisania w C # 6 za pomocą VS 2013? Czy muszę korzystać z VS 2015?
vorou
2
To jest poprawne. @vorou ​​Brak najnowszej wersji podglądu VS 2013.
Patrick Hofman
5
W rzeczywistości jest to sposób (patrz moja odpowiedź). Ale różni się od tego, co można było robić miesiące temu przed ostatecznym wydaniem.
David De Sloovere
1
żadne z rozwiązań w tym temacie ani w innych podobnych tematach nie pomogło mi. więc jedynym rozwiązaniem jest przejście do VS 2015.
Yar
177

W ramach VS2013 możesz zainstalować nowe kompilatory w projekcie jako pakiet nuget . W ten sposób nie potrzebujesz VS2015 ani zaktualizowanego serwera kompilacji.

https://www.nuget.org/packages/Microsoft.Net.Compilers/

Install-Package Microsoft.Net.Compilers

Pakiet pozwala na użycie / kompilację kodu / składni C # 6.0. Ponieważ VS2013 nie rozpoznaje natywnie nowej składni C # 6.0, będzie wyświetlał błędy w oknie edytora kodu, chociaż będzie dobrze działał .

Za pomocą Resharpera będziesz otrzymywać zawiłe linie na funkcjach C # 6, ale żarówka daje opcję „Włącz obsługę C # 6.0 dla tego projektu” (ustawienie zapisane w .DotSettings).

Jak wspomniano przez @ stimpy77: do obsługi widoków MVC Razor potrzebujesz dodatkowego pakietu (dla tych, którzy nie czytają komentarzy)

Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

Jeśli chcesz mieć pełną obsługę C # 6.0, musisz zainstalować VS2015.

David De Sloovere
źródło
8
Pierwotne konstruktory zostały faktycznie usunięte z ostatecznej wersji. Dlatego nie działają.
Mark A. Donohoe,
8
Chciałbym tylko zwrócić uwagę na każdego, kto chce używać C # 6 w Razor w projekcie MVC5, wygląda na to, że jest to osobny pakiet NuGet i jest wymagany, nawet jeśli używasz VS2015. Zobacz stackoverflow.com/a/30832849/11398
Jon Davis,
2
Działa (jak można skompilować), jednak VS2013 nadal wyświetla błędy: stackoverflow.com/questions/35796001/…
mnwsmit
2
on on on. To było fajne. Kompilator pokazuje z góry błędy, ale kompiluje się z powodzeniem, gdy jest faktycznie kompilowany. Co za hack, aby rozpocząć weekendowy poranek!
RBT
1
pokaże błędy w oknie edytora kodu, chociaż będzie dobrze działał. Po prostu poczułem potrzebę ponownego wskazania. Świetna odpowiedź!
meJustAndrew
5

Wiele odpowiedzi tutaj napisano przed przejściem Roslyn (kompilatory .NET C # i VB typu open source) do wersji .NET 4.6. Więc nie pomogą ci, jeśli twój projekt celuje, powiedzmy 4.5.2, tak jak mój (odziedziczony i nie można go zmienić).

Ale możesz pobrać poprzednią wersję Roslyn z https://www.nuget.org/packages/Microsoft.Net.Compilers i zainstalować ją zamiast najnowszej wersji. Użyłem 1.3.2. (Próbowałem 2.0.1 - która wydaje się być ostatnią wersją działającą w .NET 4.5 - ale nie udało mi się go skompilować *). Uruchom to z konsoli Menedżera pakietów w VS 2013:

PM> Install-Package Microsoft.Net.Compilers -Version 1.3.2

Następnie uruchom ponownie Visual Studio. Początkowo miałem kilka problemów; musisz przywrócić domyślną wersję C # (C # 6.0 nie pojawia się na liście wersji, ale wygląda na domyślną), a następnie wyczyścić, zapisać, zrestartować VS i ponownie skompilować.

Co ciekawe, nie miałem żadnych błędów IntelliSense z powodu funkcji C # 6.0 użytych w kodzie (które były powodem, dla którego chciałem C # 6.0 w pierwszej kolejności).

* wersja 2.0.1 zwróciła błąd Zadanie „Microsoft.CodeAnalysis.BuildTasks.Csc nie mogło zostać załadowane z zestawu Microsoft.Build.Tasks.CodeAnalysis.dll. Nie można załadować pliku lub zestawu„ Microsoft.Build.Utilities.Core, wersja = 14.0.0.0, Kultura = neutralny, PublicKeyToken = b03f5f7f11d50a3a 'lub jedna z jego zależności. System nie może znaleźć określonego pliku. Potwierdź, że deklaracja jest poprawna, że ​​zestaw i wszystkie jego zależności są dostępne i że zadanie zawiera klasa publiczna, która implementuje Microsoft.Build.Framework.ITask.

AKTUALIZACJA Jedną z rzeczy, które zauważyłem po opublikowaniu tej odpowiedzi, jest to, że jeśli zmienisz dowolny kod podczas debugowania („Edytuj i kontynuuj”), przekonasz się, że kod C # 6.0 nagle pojawi się jako błąd w czymś, co wydaje się powracać do środowisko wcześniejsze niż C # 6.0. Wymaga to ponownego uruchomienia sesji debugowania. BARDZO denerwujące, zwłaszcza w przypadku aplikacji internetowych.

SteveCinq
źródło
@RichBianco To wspaniale - dziękuję za opinie i głosowanie za. Osobiście nie rozumiem, dlaczego wersja 2.0.1 nie działa. Jeśli ktoś ma jakieś wskazówki na ten temat - na przykład, jak pozbyć się zgłoszonego przeze mnie błędu - prześlij swoją poprawkę.
SteveCinq
4

Warto wspomnieć, że czas kompilacji zostanie wydłużony dla użytkowników VS 2015 po :

Install-Package Microsoft.Net.Compilers

Ci, którzy używają VS 2015 i muszą zachować ten pakiet w swoich projektach, mogą naprawić dłuższy czas kompilacji .

Edytuj plik packages\Microsoft.Net.Compilers.1.2.2\build\Microsoft.Net.Compilers.propsi wyczyść go. Plik powinien wyglądać następująco:

<Project DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
</Project>

Takie postępowanie wymusza zbudowanie projektu takim, jaki był przed dodaniem Microsoft.Net.Compilerspakietu

Ashot Muradian
źródło
2

Możliwe jest użycie pełnych funkcji C # 6.0 w Visual Studio 2013, jeśli masz Resharper.
Musisz włączyć Resharper Build i voilá! W Opcjach Resharpera -> Kompilacja - włącz kompilację Resharpera i w „Użyj wersji MSBuild.exe” wybierz „Ostatnio zainstalowane”

W ten sposób Resharper zbuduje projekty C # 6.0, a także nie podkreśli kodu C # 6.0 jako nieprawidłowego.

Używam tego również, chociaż mam Visual Studio 2015, ponieważ:

  1. Testy jednostkowe w Resharper z jakiegoś powodu nie działają dla mnie w Visual Studio 2015
  2. VS 2015 zużywa dużo więcej pamięci niż VS 2013.

Kładę to tutaj, ponieważ od jakiegoś czasu szukałem rozwiązania tego problemu i być może pomoże to komuś innemu.

devdimi
źródło
-1

Wydaje się, że istnieje jakieś nieporozumienie. Zamiast próbować załatać VS2013 tutaj i odpowiedz od faceta Microsoftu: https://social.msdn.microsoft.com/Forums/vstudio/en-US/49ba9a67-d26a-4b21-80ef-caeb081b878e/will-c- 60-ever-be-support-by-vs-2013? Forum = roslyn

Przeczytaj więc i zainstaluj VS2015.

Alexander Christov
źródło
1
link daje mi „nieautoryzowany” nawet po ms logowaniu. Oczywiście instalacja VS2015 lub nowszej wersji jest kosztem w tysiącach funtów brytyjskich w niektórych ustawieniach.
Chris F Carroll