【问题标题】:C# 6.0 builds fail on TFS Build even with Microsoft.Net.Compilers installed即使安装了 Microsoft.Net.Compilers,C# 6.0 构建也会在 TFS 构建上失败
【发布时间】:2017-01-08 15:56:50
【问题描述】:

我的公司有 TFS 2013。
我有一个使用 C# 6.0 特性的项目。
我的团队没有直接访问构建服务器的权限。 VS2015 尚未安装在那里,但管理服务器的人正在寻找安装 2015 构建工具。

与此同时,我已经安装了 Microsoft.Net.Compilers NuGet 包,如C# 6.0 TFS Builds 的答案和此处的其他几个问题中所述。

解决方案中的一些项目已经安装了它: (一个 Asp.Net MVC 5 项目和一个 Web API 项目。)

构建解决方案时,TFS 对某些项目使用包中的 Rosyln 编译器,对其他项目使用默认编译器。

  • 我已删除并重新添加了包。
  • 我尝试在包的 1.0.0、1.1.0 和 1.3.2 版本之间切换。
  • 我并排打开了 .csproj 文件以寻找细微的差异。
  • 我已经从同一个项目中创建了多个解决方案和多个构建定义,以查看是否某些组合导致了问题。
    • 其中一个项目在一个构建的一部分时始终使用默认编译器进行构建,而在作为另一个构建的一部分构建时始终使用 Roslyn 编译器。

这两个 Web 项目从不使用 Roslyn 编译器。 还有 3 个其他库、一个控制台应用程序和一堆包含单元/集成测试的项目。 除了一个项目(其中一个库)的行为取决于它所在的构建版本之外,所有项目在它们使用的编译器中似乎都是一致的

我在这里缺少什么?为什么 TFS 可能会为某些项目使用包编译器而对其他项目不使用?

构建错误的抽样: 名称的使用:

SomeController.cs (53): The name 'nameof' does not exist in the current context

静态使用:

RedactedTests.cs (5): Identifier expected; 'static' is a keyword
RedactedTests.cs (5): Expected class, delegate, enum, interface, or struct

空合并运算符:

InterestingClassName.cs (40): Invalid expression term '.'
InterestingClassName.cs (40): Syntax error, ':' expected
InterestingClassName.cs (40): Invalid expression term '.'
InterestingClassName.cs (40): Syntax error, ':' expected

表达式主体属性:

MyClass.cs (11): ; expected
MyClass.cs (11): Method must have a return type
MyClass.cs (11): Type expected

【问题讨论】:

  • 构建失败时您在日志中收到的详细错误消息是什么?此外,如果您在本地和构建代理机器上直接在 VS 中运行该 C#6.0 项目,在这两种情况下您会收到相同的错误消息吗?
  • @Patrick-MSFT 错误消息是语法错误消息,根据导致失败的 C#6.0 功能而有所不同,但我将添加一些示例。一切都在本地建立在 VS2015 中。我的团队无法直接访问构建代理机器以在其中运行它,并且尚未安装 2015 工具。
  • 您是否在解决方案中的每个项目上安装了 NuGet 包? -- 每个项目都需要安装。
  • @BrianSlugs83 我们最终让负责构建服务器的人员安装了 2015 工具,问题得到了解决。但是在解决方案中的每个项目上都安装了 NuGet 包时是的。
  • 确保您已在构建机器上安装了最新的 MSbuild。还要确保您的项目配置为使用 c#6.0 或更高版本。确保您的构建任务使用最新的 MSBuild 或最新的 Visual Studio 来构建包含 C#6.0 项目/解决方案的项目

标签: tfs c#-6.0


【解决方案1】:

可能使用 .sln 文件的版本,如果解决方案使用目标版本,请注意这一点。

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1

你能尝试改变吗?

【讨论】:

  • 双重检查,所有解决方案都具有相同的版本。并且如问题所示,同一解决方案中的不同项目使用默认编译器或 nuget 包编译器构建。如果它依赖于解决方案版本,那么似乎所有项目都将使用 nuget 包编译器构建或全部使用默认值。
猜你喜欢
  • 2015-07-13
  • 2015-04-01
  • 2021-07-16
  • 2018-12-17
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多