我有一个简单的测试控制台应用程序。它唯一的代码是
public class Class1
{
private protected int _value = 0b_1001_0110;
}
这只是为了测试这些C 7.2特性是否能够构建。
在visual studio 2017 15.5.2中,如果我像这样设置语言版本,它们可以很好地构建
如果我现在将项目签入vsts并运行构建,它将失败,并出现各种错误,例如。
test\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中失败
test\csharp72test\csharp72test\class1.cs(7,40):错误cs8107:功能
“前导数字分隔符”在C 7.0中不可用。请使用
语言版本7.2或更高版本。
它现在使用的是csc.exe的正确版本,但没有传递/langversion:latest。
如何在多项目解决方案中为每个项目正确传递此信息?
最佳答案
visual studio生成任务也正在调用MSBuild.exe
命令来运行生成。
可以直接传递msbuild参数,并通过本地命令行成功生成,如下所示:
msbuild "C:\Users\Admin\Source\repos\ClassLibrary2\ClassLibrary2\ClassLibrary2.csproj" /property:langversion=latest
因此,只需在vsts中的visual studio生成任务的msbuild参数中添加
/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。