【问题标题】:Using C# 7.1 with MSBuild将 C# 7.1 与 MSBuild 结合使用
【发布时间】:2018-03-07 06:46:24
【问题描述】:

要将新的 C# 7.1 language features 与 Visual Studio 2017 一起使用,请将设置 <LangVersion>latest</LangVersion> 添加到项目文件中。

但是,从 MSBuild(版本 15.3.409.57025,位于 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.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 工具重新定位到 .NET 4.7(这节省了很多点击和出现 - 基于检查 .csproj 文件更改 - 正确完成工作)。

所有项目均从 Visual Studio 2017 成功构建。

【问题讨论】:

  • 你能分享你的 csproj 文件内容吗?
  • 您的 MSBuild 位于何处?它位于C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin 中,添加语言元素确实有效。您的项目是从 Visual Studio 构建的吗?
  • 你能显示你的项目文件的例外吗?
  • 该项目是否可能引用Microsoft.Net.Compilers nuget 包?如果是这样,则需要对其进行更新以获得支持此功能的编译器版本。

标签: c# msbuild visual-studio-2017 c#-7.1


【解决方案1】:

我在这里有一个使用 C# 7.1 的 C# 控制台应用程序的解决方案。

使用 VS 2017 命令行(因此使用 MSBuild 15.3.409.57025)运行良好。 (.csproj 确实包含<LangVersion>latest</LangVersion>。)

MSBuild 尚不支持此功能,还是可以使其正常工作?

是的。

csc.exe 的哪个实例正在运行,它的版本是什么?因为看起来,尽管引用了版本,但您的 csc.exe 版本错误(错误消息显示 1-6,因此即使 C# 7 也无法使用)。

【讨论】:

  • 您提出的解决方案究竟是什么?正如 OP 的程序中所述,这一切似乎开箱即用。
  • @Richard - 更新了我的问题以解决您的一些疑问
  • @PatrickHofman 更新以明确我正在解决问题的存在部分。
【解决方案2】:

我们发现我们的 MVC 项目触发了这个问题。

为了解决这个问题,我们将这些项目使用的 Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet 包从版本 1.0.0 更新为 1.0.7

【讨论】:

  • 除此之外,我还必须更新Microsoft.Net.Compilers
【解决方案3】:

添加对 Microsoft.Net.Compilers 包的引用(版本 2.3.x,以获取 C# 7.1)。

简短的description of the package

Microsoft.Net.Compilers

这个包不仅包括 C# 和 Visual Basic 编译器,它还修改 MSBuild 目标,以便 使用包含的编译器版本,而不是任何系统安装的 版本。安装后,此包需要 Microsoft Build Tools 2015.

【讨论】:

  • 这对我有用。我的主项目中有这个包,但今天我将一个引用项目更新为 C# 7.1,却忘记了它没有这个 NuGet 包。我收到了这个确切的问题 - 在 VS 中构建但在构建服务器上失败。感谢您的提示!
  • 其实...我的问题也是因为我更改了DEBUG项目属性设置中的值。访问 RELEASE 设置发现它仍然是 C#(最新的主要版本)。改变它,签入并进行另一个构建。现在快乐:)
  • 这就是为我修复它的原因@Ian Yates。谢谢。
【解决方案4】:

Nuget 包

  • Microsoft.Net.Compilers nuget 包不起作用,不需要安装。

设置如下project/build settings

  • Debug Release 构建属性中至少设置C# 7.1 或更高版本。 (通过:项目菜单 > [项目名称] 属性 > 构建选项卡 > [高级] 按钮 > 语言版本)。

  • 将其设置为最新不会工作。

还要确保您运行的是最新的 MSBuild 版本。

【讨论】:

  • 宾果游戏!这是我让它与 TFS 和 MSBuild 一起工作的正确答案。
  • 谢谢!删除 Microsoft.Net.Compilers 解决了这个问题...并且更容易升级一些其他项目。
  • 我的项目禁用了语言版本下拉菜单。我正在使用 vs 2019 企业版。这是一个控制台应用程序项目。
【解决方案5】:

如果你登陆这里是因为你得到了 OP 提到的错误,运行 msbuild via command line(例如从构建代理,如 jenkins),解决方案可能就像升级 Microsoft Build Tools 2015 一样简单。

您可以通过choco install microsoft-build-tools 或通过官方Microsoft Build Tools 2015 手动执行此操作,或更新您的Visual Studio 2017 安装。

【讨论】:

    【解决方案6】:

    确保您已更改“所有配置”,而不仅仅是“调试”

    否则你会困惑为什么它在生产中失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-07
      • 2016-01-17
      • 2015-08-06
      相关资源
      最近更新 更多