【发布时间】: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 项目/解决方案的项目