在 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 上运行:
- 在构建服务器上安装 Visual Studio 2015
- 将构建定义中的
MSBuild Arguments
设置为 /p:VisualStudioVersion=14.0
(即 Visual Studio 2015 模式)
- 在每个使用 C# 6 语法的项目中,安装 NuGet 包 Microsoft.Net.Compilers
install-package Microsoft.Net.Compilers
#3 让我与众不同。
对于那些使用 TFS 2012 和 VS 2017 绕过 2015 的人,您可以按照我在
上的回答
如何在 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 上运行:
- 在构建服务器上安装 Visual Studio 2015
- 将构建定义中的
MSBuild Arguments
设置为/p:VisualStudioVersion=14.0
(即 Visual Studio 2015 模式) - 在每个使用 C# 6 语法的项目中,安装 NuGet 包 Microsoft.Net.Compilers
install-package Microsoft.Net.Compilers
#3 让我与众不同。
对于那些使用 TFS 2012 和 VS 2017 绕过 2015 的人,您可以按照我在