C# 6.0 TFS Builds

18
我正在测试使用Visual Studio 2015 CTP的C# 6.0新功能,但是在TFS 2013和Visual Studio Online中,我的项目构建失败了。
我知道Visual Studio使用新的Roslyn编译器来替换原生的.NET编译器,因此TFS构建代理无法编译。
我的问题是,我该如何在构建代理(以及Visual Studio Online中)安装Roslyn,并告诉构建代理使用这个编译器而不是原生编译器?

您可能无法在VS在线上安装任何东西。 - i3arnon
我在某个地方读到,我可以启动一个Azure VM来托管构建代理。但这仍然让我困惑如何让它使用Roslyn。 - Chris Pickford
那么你可能可以指示代理使用你的VS 2015 CTP工具进行构建(我知道在TeamCity中可以这样做)。 - i3arnon
3个回答

12

在编译步骤中,您有几个选项:

  1. 您可以按项目引用Microsoft.Net.Compilers NuGet包,以使用该版本的编译器。
  2. 您可以安装VS 2015 CTP软件包中的Microsoft Build Tools软件包,而无需安装整个VS。

但是,正如@MrHinsh所指出的那样,这些方法可能会导致您缺少工具链的其他部分。


如果我添加了net.compilers包,仍然会出现构建失败的情况:"csc2.exe"以代码2427728退出。 - quadroid
@jessehouwing 即使是Tfs2013也适用吗? - Maslow

3
如果您创建一个安装有Visual Studio 2015 CTP和TFS 2013 Build的Server 2012 r2的Azure VM,则可以将其连接到VSO。
然后,您应该能够完成构建,并自动使用新编译器。
虽然您可以只安装编译器,但构建不仅仅是编译。您很快就会需要Visual Studio的其他功能,例如单元测试,作为构建的一部分执行。您的构建代理应该反映您开发人员标准工作站的配置。如果您的开发人员需要它,则代理也需要它。
注意:Visual Studio是针对个人许可的,而不是针对机器的许可。构建代理无需许可证。实际上,只要您注册了一个单独的许可证或特定级别(例如Ultimate),则可以在每个构建服务器上安装它。

1
对的,Roslyn编译器是由VS2015的构建工具MSI安装的,但也可以单独安装。或者,您可以使用http://www-1.nuget.org/packages/Microsoft.Net.Compilers/在每个项目上基础上更改编译器。 - Kevin Pilch
您不必安装Visual Studio即可在VS2013或VS2015中获取C#和VB编译器。构建工具包是专为在没有VS许可证的构建机器上安装而设计的。 - Kevin Pilch
  1. 您不需要购买VS许可证来在构建服务器上安装VS。您的许可证已经覆盖了它。
  2. 编译只是构建的一部分。您应该至少运行测试和打包。
- MrHinsh - Martin Hinshelwood
@KevinPilch-Bisson 感谢您的 NuGet 建议,这似乎可以让项目在构建代理上编译!如果您想将此添加为答案,我会接受。但是,当它尝试运行单元测试时,我现在遇到了问题 -“无法加载文件或程序集'Microsoft.VisualStudio.TestPlatform.Utilities,Version = 12.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其某个依赖项。系统找不到指定的文件。” - Chris Pickford
现在安装Visual Studio。 - MrHinsh - Martin Hinshelwood
  1. 你可以安装2015版本的构建工具或者VS2015。我两个都安装了。
  2. 你需要使用一个不同的构建定义,使用新的工具 - 我使用了TfvcTemplate.12.xaml - 参见https://dev59.com/nFwY5IYBdhLWcg3waXEF?rq=1
- Quango

0
在BuildTemplate的Process部分中,使用了MSBuild参数/tv:14.0 /p:GenerateBuildInfoConfigFile=false /p:VisualStudioVersion=14.0。

1
测试了这个配置,但它并不起作用。你需要使用不同的构建定义 - 请参见https://dev59.com/nFwY5IYBdhLWcg3waXEF?rq=1 - Quango
使用TfvcTemplate.12.xaml时,/tv:14.0参数就足够了。请参见https://dev59.com/nFwY5IYBdhLWcg3waXEF#32662291。 - gReX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接