在 TFS 2012 上构建 c#6.0

Build c# 6.0 on TFS 2012

如何在 TFS 2012 上使用 C# 6.0 功能构建 Visual Studio 2015 解决方案,而无需在构建代理上安装 Visual Studio 2015(使用 Microsoft Build Tools 2015 RC)

我已经安装了 MSBuild Tools,但仍然出现异常。如何让我的构建模板使用 MSBuild 14(仅适用于一个项目)

为什么我的 TFS 2012 编译异步和等待 (c# 5.0) 没有任何问题,而 BuildAgent 只安装了 Visual Studio 2012?

我尝试将我的 BuildProcessTemplate 的 ToolPath 更改为 MSBuild/14.0/ 但我收到构建错误:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.targets (316): "csc2.exe" exited with code -532462766.

安装 Microsoft.Net.Compilers 1.0.0-rc2 编译器出现同样的错误。

如果我使用命令行编译项目,我会得到完全相同的错误/尽管在我的开发机器上使用具有完全相同参数的命令行时没有错误。

这是我在命令行中得到的异常:

C:\Program Files (x86)\MSBuild.0\bin\csc2.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentro.....
     Unhandled Exception: System.InvalidProgramException: Common Language Runtime detected an invalid program.
        at System.Collections.Immutable.SecurePooledObject`1.Use[TCaller](TCaller& caller)
        at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator.PushLeft(SortedInt32KeyNode`1 node)
        at System.Collections.Immutable.SortedInt32KeyNode`1.Enumerator..ctor(SortedInt32KeyNode`1 root)
        at System.Collections.Immutable.ImmutableDictionary`2.Enumerator..ctor(SortedInt32KeyNode`1 root, Builder builder)
        at Microsoft.CodeAnalysis.RuleSet.GetDiagnosticOptionsFromRulesetFile(Dictionary`2 diagnosticOptions, String resolvedPath, IList`1 diagnosticsOpt, CommonMessageProvider messageProviderOpt)
        at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.Parse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CSharp.CSharpCommandLineParser.CommonParse(IEnumerable`1 args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CommonCompiler..ctor(CommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CSharp.CSharpCompiler..ctor(CSharpCommandLineParser parser, String responseFile, String[] args, String baseDirectory, String additionalReferencePaths)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc..ctor(String responseFile, String baseDirectory, String[] args)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc.Run(String[] args)
        at Microsoft.CodeAnalysis.BuildTasks.BuildClient.RunWithConsoleOutput(String[] args, RequestLanguage language, Func`2 fallbackCompiler)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Program.Main(String[] args)
        at Microsoft.CodeAnalysis.CSharp.CommandLine.Csc2.Main(String[] args)

尝试使用其中之一

/p:VisualStudioVersion=14.0

/tv:14 

在你的构建参数中

我用的是TFS2013 U5,但还是一样的:

  • 在 BuildServer 机器上安装了 VS2015 RTM
  • 将其放入 BuildTemplate 的 Process 部分的 MSBuild 参数中

/tv:14.0 /p:GenerateBuildInfoConfigFile=false /p:VisualStudioVersion=14.0

编译和 VS 单元测试现在 运行 正常。

Jiří Zídek 的回答是正确的,但缺少一个关键细节。我必须执行以下操作才能在 TFS 2012 更新 2 上运行:

  1. 在构建服务器上安装 Visual Studio 2015
  2. 将构建定义中的 MSBuild Arguments 设置为 /p:VisualStudioVersion=14.0(即 Visual Studio 2015 模式)
  3. 在每个使用 C# 6 语法的项目中,安装 NuGet 包 Microsoft.Net.Compilers install-package Microsoft.Net.Compilers

#3 让我与众不同。

对于那些使用 TFS 2012 和 VS 2017 绕过 2015 的人,您可以按照我在

上的回答