在VSTS中构建时如何设置csc langversion?

时间:2018-01-01 15:01:05

标签: c# tfs azure-devops azure-pipelines csc

我有一个简单的测试控制台应用程序。它唯一的代码是

public class Class1
{
    private protected int _value = 0b_1001_0110;
}

只是为了测试这些C#7.2功能是否会构建。

在Visual Studio 2017 15.5.2中,如果我设置像这样的语言版本

,它们就可以正常构建

Advanced build settings

如果我现在将项目检入VSTS并运行构建,则会因各种错误而失败,例如

  

测试\ CSharp72Test \ CSharp72Test \ Class1.cs(7,17):错误CS0107:更多   比一个保护改性剂
  Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS1013:无效   编号

因为它对C#7一无所知。

如果我现在添加'Microsoft.NET.Compilers 2.6.1'NuGet包并重建它在本地工作正常但在VSTS中失败

  

测试\ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS8107:功能   C#7.0中没有“前导数字分隔符”。请用   语言版本7.2或更高。

现在使用正确版本的CSC.exe但没有传递/ langversion:latest。

如何在多项目解决方案中为每个项目正确传递

2 个答案:

答案 0 :(得分:3)

Visual Studio Build任务也调用MSBuild.exe命令来运行构建。

您可以直接传递MSBuild Argument并通过本地命令行构建成功,如下所示:

msbuild "C:\Users\Admin\Source\repos\ClassLibrary2\ClassLibrary2\ClassLibrary2.csproj" /property:langversion=latest 

因此,您只需要在VSTS中的Visual Studio Build任务的MsBuild Argument中添加/property:langversion=latest,或者直接将<LangVersion>xx</LangVersion>的值更改为项目文件中的最新值。

但是,根据VSTS Hosted VS2017 image,主机代理仅安装了Visual Studio 2017 Enterprise * 版本:15.4.0

  

C# 7.2 ships with the 15.5 release of Visual Studio 2017.

还有相关的用户声音:Hosted agent with VS 15.5 to enable C# 7.2 support

作为一种变通方法,您可以设置所有者构建代理并安装Visual Studio 2017 15.5.2。

答案 1 :(得分:0)

对于所有构建配置,您需要将语言版本设置为C# latest minor version (latest) ,而不仅仅是Debug。有关操作方法,请参见here

  
      
  • 右键单击YourProject,然后单击Properties

  •   
  • 单击Build(如果尚未选择)

  •   
  • Configuration更改为All Configurations

  •   
  • 点击Advanced...

  •   
  • 更改语言版本

  •