即使安装了Microsoft.Net.Compiler,C#6.0版本在TFS版本上也会失败

即使安装了Microsoft.Net.Compiler,C#6.0版本在TFS版本上也会失败,tfs,c#-6.0,Tfs,C# 6.0,我的公司有2013年TFS。 我有一个使用C#6.0功能的项目。 我的团队没有直接访问生成服务器的权限。VS2015尚未安装在那里,但管理服务器的人员正在寻找安装2015构建工具 同时,我已经安装了Microsoft.Net.Compilers NuGet软件包,如这里的回答和其他几个问题中所述 解决方案中的某些项目已经安装了它: (一个Asp.NETMVC5项目和一个WebAPI项目。) 构建解决方案时,TFS对某些项目使用包中的Rosyln编译器,对其他项目使用默认编译器 我已删除并重新添

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

同时,我已经安装了Microsoft.Net.Compilers NuGet软件包,如这里的回答和其他几个问题中所述

解决方案中的某些项目已经安装了它: (一个Asp.NETMVC5项目和一个WebAPI项目。)

构建解决方案时,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

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

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

您可以尝试更改此设置吗?

当生成失败时,您在日志中收到的详细错误消息是什么?此外,如果您在本地和构建代理计算机上直接在VS中运行该C#6.0项目,您会在这两种情况下收到相同的错误消息吗?@Patrick MSFT错误消息是语法错误消息,并且根据导致失败的C#6.0功能不同,但我将添加一些示例。一切都在VS2015本地构建。我的团队没有直接访问build agent计算机的权限,无法在那里运行它,而且尚未安装2015工具。您是否在解决方案中的每个项目上都安装了NuGet软件包?--它需要安装在每个项目上。@BrianSlugs83我们最终让负责构建服务器的人员安装了2015工具,问题得到了解决。但在解决方案中的每个项目上安装NuGet包时,都是。请确保在生成计算机上安装了最新的MSbuild。还要确保您的项目配置为使用c#6.0或更高版本。确保生成任务使用最新的MSBuild或最新的Visual Studio生成包含C#6.0项目/解决方案的项目。如果选中,则所有解决方案的版本都相同。正如问题中所指出的,同一解决方案中的不同项目使用默认编译器或nuget包编译器构建。如果它依赖于解决方案版本,那么似乎所有项目都将使用nuget包编译器构建,或者全部使用默认值。