【发布时间】:2018-06-11 13:14:15
【问题描述】:
我有一个简单的测试控制台应用程序。它唯一的代码是
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。
如何在多项目解决方案中正确传递每个项目?
【问题讨论】:
-
您是使用托管构建队列还是管理自己的构建队列?听起来您的构建代理没有安装 VS 2017 更新。
-
托管的。如果设置了语言版本,则使用 NuGet 编译器包将起作用。
-
在一个构建代理机器上,可以有多个MSBuild版本,blog.lextudio.com/the-rough-history-of-msbuild-cc72a217fa98所以仅仅在你的项目文件中设置语言版本是没有用的,你必须将构建代理(你的管道定义)配置为选择正确的 MSBuild 版本。我为 Obfuscar 所做的是调用适当的 PowerShell cmdlet 来帮助github.com/obfuscar/obfuscar/blob/master/release.ps1
标签: c# tfs azure-devops azure-pipelines csc