将 C# 7.1 与 MSBuild 结合使用
Using C# 7.1 with MSBuild
要在 Visual Studio 2017 中使用新的 C# 7.1 language features,请将设置 <LangVersion>latest</LangVersion>
添加到项目文件中。
但是,从 MSBuild(版本 15.3.409.57025,位于 C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin
)构建此类项目会导致错误:
CSC : error CS1617: Invalid option 'latest' for /langversion;
must be ISO-1, ISO-2, Default or an integer in range 1 to 6.
MSBuild 是否还不支持此功能,或者是否有可能实现此功能?
这涵盖了最初在 Visual Studio 2013 年和 2015 年以不同方式创建的 200 多个项目。它们都使用 Target Framework Migrator 工具(保存 lots 次点击并出现 - 基于检查 .csproj 文件更改 - 正确完成工作)。
从 Visual Studio 2017 年开始,项目全部构建成功。
我在这里找到了一个使用 C# 7.1 的 C# 控制台应用程序的解决方案。
使用 VS 2017 命令行(以及 MSBuild 15.3.409.57025)它运行良好。 (.csproj
确实包含 <LangVersion>latest</LangVersion>
。)
Is this feature just not yet supported by MSBuild, or is it possible to get this working?
是的。
csc.exe
的哪个实例正在 运行 以及它的版本是什么?因为看起来,尽管引用了版本,但您的 csc.exe
版本是错误的(错误消息显示 1-6
所以即使 C# 7 也不起作用)。
我们发现我们的 MVC 项目触发了这个问题。
为了修复,我们将这些项目使用的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
NuGet 包从版本 1.0.0 更新为 1.0.7.
添加对 Microsoft.Net.Compilers 包(版本 2。3.x,以获得 C# 7.1)的引用。
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.
Nuget 包
Microsoft.Net.Compilers
nuget 包不工作,不需要 安装。
设置如下project/build settings
在 Debug
和 Release
构建属性中至少设置 C# 7.1
或更高。 (通过:项目菜单 > [ProjectName] 属性 > 构建选项卡 > [高级] 按钮 > 语言版本)。
将其设置为最新 无效。
还要确保您是 运行 最新的 MSBuild 版本。
如果您因为遇到 OP 提到的错误而登陆这里,运行 msbuild 通过命令行 (例如来自构建代理,例如 jenkins),解决方案可能很简单 升级 Microsoft Build Tools 2015.
您可以通过 choco install microsoft-build-tools or manually via the official Microsoft Build Tools 2015 或更新您的 Visual Studio 2017 安装来做到这一点。
确保您已针对 "All Configuration" 而不仅仅是 "Debug"
进行了更改
否则您会感到困惑,为什么它在生产中会失败。
要在 Visual Studio 2017 中使用新的 C# 7.1 language features,请将设置 <LangVersion>latest</LangVersion>
添加到项目文件中。
但是,从 MSBuild(版本 15.3.409.57025,位于 C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild.0\Bin
)构建此类项目会导致错误:
CSC : error CS1617: Invalid option 'latest' for /langversion;
must be ISO-1, ISO-2, Default or an integer in range 1 to 6.
MSBuild 是否还不支持此功能,或者是否有可能实现此功能?
这涵盖了最初在 Visual Studio 2013 年和 2015 年以不同方式创建的 200 多个项目。它们都使用 Target Framework Migrator 工具(保存 lots 次点击并出现 - 基于检查 .csproj 文件更改 - 正确完成工作)。
从 Visual Studio 2017 年开始,项目全部构建成功。
我在这里找到了一个使用 C# 7.1 的 C# 控制台应用程序的解决方案。
使用 VS 2017 命令行(以及 MSBuild 15.3.409.57025)它运行良好。 (.csproj
确实包含 <LangVersion>latest</LangVersion>
。)
Is this feature just not yet supported by MSBuild, or is it possible to get this working?
是的。
csc.exe
的哪个实例正在 运行 以及它的版本是什么?因为看起来,尽管引用了版本,但您的 csc.exe
版本是错误的(错误消息显示 1-6
所以即使 C# 7 也不起作用)。
我们发现我们的 MVC 项目触发了这个问题。
为了修复,我们将这些项目使用的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform
NuGet 包从版本 1.0.0 更新为 1.0.7.
添加对 Microsoft.Net.Compilers 包(版本 2。3.x,以获得 C# 7.1)的引用。
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.
Nuget 包
Microsoft.Net.Compilers
nuget 包不工作,不需要 安装。
设置如下project/build settings
在
Debug
和Release
构建属性中至少设置C# 7.1
或更高。 (通过:项目菜单 > [ProjectName] 属性 > 构建选项卡 > [高级] 按钮 > 语言版本)。将其设置为最新 无效。
还要确保您是 运行 最新的 MSBuild 版本。
如果您因为遇到 OP 提到的错误而登陆这里,运行 msbuild 通过命令行 (例如来自构建代理,例如 jenkins),解决方案可能很简单 升级 Microsoft Build Tools 2015.
您可以通过 choco install microsoft-build-tools or manually via the official Microsoft Build Tools 2015 或更新您的 Visual Studio 2017 安装来做到这一点。
确保您已针对 "All Configuration" 而不仅仅是 "Debug"
进行了更改否则您会感到困惑,为什么它在生产中会失败。