我有一个简单的测试控制台应用程序。它唯一的代码是
public class Class1
{
private protected int _value = 0b_1001_0110;
}
只是为了测试这些C#7.2功能是否会构建。
在Visual Studio 2017 15.5.2中,如果我设置像这样的语言版本
,它们就可以正常构建如果我现在将项目检入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。
如何在多项目解决方案中为每个项目正确传递?
答案 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 。
还有相关的用户声音: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...
更改语言版本