使用 C# 6.0 功能运行 TFS 构建

Posted

技术标签:

【中文标题】使用 C# 6.0 功能运行 TFS 构建【英文标题】:Running TFS Build with C# 6.0 features 【发布时间】:2015-10-14 13:35:48 【问题描述】:

我最近才开始在我的项目中使用 C# 6.0 的 nameof() 运算符。现在(签入时,呃...)我(或者更好的是:构建代理)拒绝构建项目(在本地编译得很好),因为它找不到 nameof() 表达式。

我开始在构建控制器以及 TFS 服务器本身上安装 VS 2015,但无济于事。如何让我的 TFS 2013 Update 5 构建具有 C# 6.0 功能的项目?

我已经考虑过编辑 BuildProcessTemplate,但我们在所有构建定义中一直使用默认模板,我什至不知道这是否是正确的方法。

【问题讨论】:

【参考方案1】:

您可以在构建代理计算机上安装 "Microsoft Build Tools 2015" 并将构建模板配置为使用该版本的 msbuild,或者在您要使用新编译器构建的项目中安装 Microsoft.Net.Compilers NuGet 包.

【讨论】:

我想强调这一点。在构建代理机器上并排安装多个版本的编译器是不够的,您必须通过选择所需的工具链来指定应该使用哪一个。 谢谢。想详细说明如何为此配置构建模板? 嗯,我原以为安装 TFS 2015 可以解决问题 - 但没有。我收到“无效的表达式术语”错误 @GiulioVian 您将如何从 nuget 包中将您的构建指向 Microsoft.Net.Compilers? 安装构建工具只是第一步,您还必须使用不同的构建定义或修改默认值。见***.com/questions/32659106/…【参考方案2】:

我在使用 TFS 2015 时遇到了同样的问题。我的构建定义采用 XAML 构建定义格式 - 这种格式支持 C#6 功能,即使您指定 /p:VisualStudioVersion=14.0 或 15.0 用于高级构建过程参数中的 MSBuild 参数。

改为使用新的构建格式。在 Visual Studio 2017 中(是的,您可以将 VS 2017 与 TFS 2015 一起使用),它位于“构建定义”部分(请注意下面有旧部分“XAML 构建定义”)。

如果您以这种方式创建新的构建定义,则会打开一个网站,您必须在其中创建构建步骤。二进制文件出现在“Artefacts”部分下。不幸的是,我找不到将 XAML 构建定义转换为新格式的方法,因此您必须从头开始创建它。

在 Visual Studio 构建步骤中,确保将“Visual Studio 版本”字段设置为“最新”。

提示:要将正确的文件放入您的工件中,您需要定义 Minimatch 模式。您可以找到语法 here ,在示例中,您可以找到用于部署 Web 项目的复制文件模式。

【讨论】:

以上是关于使用 C# 6.0 功能运行 TFS 构建的主要内容,如果未能解决你的问题,请参考以下文章

从 c# 身份验证异常访问 tfs

TFS Build 2013 避免代码分析

在 TFS 2017 中运行非无头自动化测试

如何修复“C# 7.0 语言功能”构建错误? (新结帐后,以前工作)

在 TFS 构建中运行 Specflow 测试

带有 TFS 构建工具的 NSIS 安装程序脚本