To use the new C# 7.1 language features with Visual Studio 2017, you add the setting <LangVersion>latest</LangVersion>
to your project file(s).
However, building such projects from MSBuild (version 15.3.409.57025, located at C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin
) results in an error:
CSC : error CS1617: Invalid option 'latest' for /langversion;
must be ISO-1, ISO-2, Default or an integer in range 1 to 6.
Is this feature just not yet supported by MSBuild, or is it possible to get this working?
This covers 200+ projects that were originally created variously in Visual Studio 2013 and 2015. They were all re-targeted to .NET 4.7 using the Target Framework Migrator tool (which saved lots of clicking and appears - based on inspecting .csproj file changes - to do the job correctly).
The projects all build successfully from Visual Studio 2017.
In case you land here because you get the error as the OP mentioned, running msbuild via command line (e.g. from a build agent such as jenkins), the solution may be as easy as to upgrade Microsoft Build Tools 2015.
You can do that via choco install microsoft-build-tools or manually via the official Microsoft Build Tools 2015 or by updating your Visual Studio 2017 installation.
Add a reference to the Microsoft.Net.Compilers package (version 2.3.x, to get C# 7.1).
A short description of the package:
I've got a solution with a C# console app using C# 7.1 here.
Using the VS 2017 command line (and thus MSBuild 15.3.409.57025) it worked fine. (The
.csproj
does contain<LangVersion>latest</LangVersion>
.)Yes it is.
Which instance of
csc.exe
is being run and what's its version? Because it looks like, despite quoting the version, you have the wrong version ofcsc.exe
(the error message says1-6
so not even C# 7 would work).We discovered that our MVC projects were triggering this issue.
To fix, we updated the
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
NuGet package used by these projects from version 1.0.0 to 1.0.7.Nuget packages
Microsoft.Net.Compilers
nuget package does not work and needn't to be installed.Set the following
project/build settings
Set at least
C# 7.1
or higher in theDebug
andRelease
build properties. (via: Project menu > [ProjectName] Properties > Build tab > [Advanced] button > Language Version).Setting it to latest does not work.
Also make sure that you are running the latest MSBuild version.
Make sure you have changed for "All Configuration" and not just "Debug"
else you will be baffling why it is failing at production.