2017-09-26 23 views
5

Aby użyć nowego C# 7.1 language features w Visual Studio 2017, należy dodać ustawienie <LangVersion>latest</LangVersion> do pliku projektu (ów).Używanie języka C# 7.1 z MSBuild

Jednak budowanie takich projektów z MSBuild (wersja 15.3.409.57025 znajdujący się na C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin) powoduje błąd:

CSC : error CS1617: Invalid option 'latest' for /langversion; 
must be ISO-1, ISO-2, Default or an integer in range 1 to 6. 

Czy ta funkcja po prostu nie są jeszcze obsługiwane przez MSBuild, czy jest to możliwe, aby ten pracujący?

Obejmuje 200 + projekty, które zostały pierwotnie utworzone różnie w Visual Studio 2013 i 2015. Wszyscy byli ponownie kierowane do .NET 4.7 za pomocą narzędzia Target Framework Migrator (który zapisany wiele klikania i pojawia się - na podstawie kontroli. zmiany pliku csproj - aby poprawnie wykonać zadanie).

wszystkie projekty z powodzeniem zbudować Visual Studio 2017

+0

Czy jesteś w stanie udostępnić zawartość pliku csproj? –

+0

Gdzie znajduje się twój MSBuild? Tutaj znajduje się w 'C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin' i dodanie elementu języka działa. Czy twój projekt jest zbudowany z Visual Studio? –

+0

Czy możesz pokazać oprócz swojego pliku projektu? –

Odpowiedz

0

Odkryliśmy, że nasze projekty MVC wywoływały ten problem.

Aby ustalić, zaktualizowaliśmy pakiet Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget używany przez tych projektów z wersji 1.0.0 do 1.0.7.

0

Mam roztwór z app konsoli C# z wykorzystaniem C# 7.1 tutaj.

Używanie wiersza polecenia VS 2017 (a tym samym MSBuild 15.3.409.57025) działało dobrze. (The .csproj robi zawierać <LangVersion>latest</LangVersion>.)

Is this feature just not yet supported by MSBuild, or is it possible to get this working?

Tak jest.

Które wystąpienie csc.exe jest uruchamiane i jaka jest jego wersja? Wygląda na to, że pomimo cytowania wersji, masz złą wersję csc.exe (komunikat o błędzie mówi: 1-6, więc nawet C# 7 nie zadziała).

+0

Jakie dokładnie rozwiązania proponujesz? Wydaje się, że wszystko przebiega gładko po wyjęciu z pudełka, jak opisano w procedurach OP. –

+0

@Richard - zaktualizowałem moje pytanie, aby odpowiedzieć na niektóre z Twoich pytań. –

+1

@PatrickHofman Zaktualizowano, aby było jasne, że zajmuję się egzystencjalną częścią pytania. – Richard

6

Dodaj odniesienie do pakietu Microsoft.Net.Compilers (wersja 2.3.x, aby uzyskać C# 7.1).

Krótki description of the package:

Microsoft.Net.Compilers

This package not only includes the C# and Visual Basic compilers, it also modifies MSBuild targets so that the included compiler versions are used rather than any system-installed versions. Once installed, this package requires Microsoft Build Tools 2015.

+0

To mi się udało. Miałem pakiet w moim głównym projekcie, ale dzisiaj zaktualizowałem projekt z referencją do C# 7.1 i zapomniałem, że nie ma tego pakietu NuGet. Otrzymałem ten dokładny problem - kompiluje się w VS, ale kończy się niepowodzeniem na serwerze kompilacji. Dzięki za napiwek! –

+1

Właściwie ... Mój problem został również spowodowany przez zmianę wartości w ustawieniach właściwości projektu DEBUG. Odwiedzając ustawienia ZWOLNIENIE stwierdzono, że wciąż był to C# (najnowsza wersja główna). Zmieniam to, sprawdzam i robię kolejną kompilację. Szczęśliwa teraz :) –

2

Wystarczy upewnić się, że co najmniej C# 7.1 lub wyższą ustawić w DebugiRelease. Ustawienie tej opcji na najnowszą działa to , a nie. Microsoft.Net.Compilers Pakiet nuget nie działa i nie musi być zainstalowany.

Upewnij się również, że używasz najnowszej wersji MSBuild.

preview