【问题标题】:TFS 2013 building .NET 4.6 / C# 6.0TFS 2013 构建 .NET 4.6 / C# 6.0
【发布时间】:2015-09-18 18:51:57
【问题描述】:

我们使用 TFS 2013 作为我们的构建服务器。我已经启动了一个 C# 6.0 项目,并且正在尝试构建它。我正在使用新的空条件运算符,并且我的构建阻塞。我尝试在 TFS 服务器上安装一些东西,包括目标包和 VS 2015。我尝试将 /tv:14.0 提供给 MSBuild 参数。

Configuration\EntityEntityConfig.cs (270):无效的表达式术语“。”
Configuration\EntityEntityConfig.cs (283):无效的表达式术语“。”
Configuration\EntityEntityConfig.cs (283):语法错误,“:”预期
...等等。

在这一点上,我不知道还能尝试什么。任何建议将不胜感激。

【问题讨论】:

  • 如果你在构建代理机器上直接在VS中运行那个C#6.0项目,你会得到同样的错误信息吗?
  • @Vicky:在构建代理机器上的 VS 中构建良好。也可以运行(尽管遇到了身份验证问题,因为我不想过多地使用 IIS)。在下面尝试您的解决方案。
  • This thread 非常相似,并提出了不同的想法来引用Microsoft.Net.Compilers nuget包。你试过吗?
  • @YanSklyarenko:除了添加那个包之外,我尝试了该线程中的所有内容,我对此有点怀疑,但我会尝试并报告。
  • @YanSklyarenko:成功了!它并不完美,因为它涉及到一旦我们迁移到 TFS 2015 就必须退出的项目更改,但它至少让我可以使用构建服务器。添加为答案?我会等待授予,以防有人能够在不更改项目的情况下找到使其工作的方法。

标签: .net tfsbuild c#-6.0 .net-4.6


【解决方案1】:

使用 TFS 2012 的用户报告成功使用:

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

作为 MSBuild 的参数。也许这可能对您有用,但到目前为止,这不适用于我的 TFS 2013 构建代理。

更新: 我终于让它在 TFS 2013 上工作。这是我必须做的:

  1. 安装 VS 2015 或 Microsoft Build Tools 2015(我都有)。
  2. 编辑我的构建以使用名为 TfvcTemplate.12.xaml 的构建过程模板。我想任何比这个更新的模板都可以,但 DefaultTemplate.11.1.xaml 肯定行不通!)
  3. 将 MSBuild 参数设置为 /tv:14.0 我不必使用上面提到的其他两个。

【讨论】:

  • @Marson 我目前也有同样的问题。我们已经有一个自定义构建过程模板。所以我不确定我应该如何处理第 2 步?
  • @J4N 第 2 步的关键部分是 TfvcTemplate.12.xaml 使用 Microsoft.TeamFoundation.Build.Activities.RunMSBuild 活动而不是 MSBuild 活动。如果你用 RunMSBuild 替换 MSBuild 活动(我就是这样做的),你应该没问题。
  • 我们正在使用带有自定义操作的 BuildProcessTemplate。现在有没有办法或选项可以调整它以使其工作?
  • 使用@Vicky - MSFT 解决方案我能够通过更改 MSBUILD 活动的 ToolVersion 和 ToolPath 属性来修复它。
  • 对我来说,VSTS 2013 默认使用 GitTemplate.12.xaml,当我复制并打开它时,RunMsBuild 块上没有 ToolPath 变量。所以我尝试将 /tv 和 /visualstudioversion 添加到 14,但在构建日志中我仍然看到它使用 C:\Program Files (x86)\MSBuild\12.0\bin\amd64\MSBuild.exe 而不是 14.0
【解决方案2】:

似乎 /tv:14.0 命令参数没有按预期工作。看: BuildActivity ignores ToolsVersion

作为一种解决方法,您需要自定义构建过程模板:

  1. 在 Visual Studio 中打开模板并找到 Run MSBuild for Project MSBuild 活动。
  2. 将 ToolVersion 设置为“14.0”。
  3. 将 ToolPath 设置为以 MSBuild14 为目标(默认情况下:“C:\Program Files (x86)\MSBuild\14.0\Bin”)。
  4. 签入此构建过程模板并将构建重新排队。

【讨论】:

  • 我必须自己将 ToolVersion 和 ToolPath 添加到 Arguments 中,但它仍然不起作用。 (制作 DefaultTemplate 的副本,将其应用于构建,根据 Simon_Weaver 的图像和您的说明进行更改,但必须弄清楚它是 Arguments,因为当我单击时它没有自行出现。更改为一个 Run MSBuild for Project两者兼得。)
  • 修改构建过程模板后,是否签入?
  • 最初这对我不起作用,但我最终发现“Run MSBuild For Project”在文件中两次!注意这一点。
  • @Plymouth223 不设置 ToolVersion。在我的 TFS 2012 上没有它也可以工作。仅设置 ToolPath。
【解决方案3】:

如果您选择在构建机器上安装 VS 2015,有一个重要步骤:打开它以供首次使用,并确保它已获得许可。否则,您将继续遇到构建失败。

【讨论】:

    【解决方案4】:

    如果您运行 DefaultTempalte.11.1.xaml 然后找到 msbuild 活动(此模板中有 2 个,它们的标签是“为项目运行 MSBuild”)并将 ToolPath 属性更改为 msbuild 工具集的路径(对我来说那是“C:\Program Files (x86)\MSBuild\14.0\Bin”)。

    没有其他必要了。

    【讨论】:

      【解决方案5】:

      如果使用 UpgradeTemplate.xml 则只需更改“为配置文件夹运行 TfsBuild”:

      1.将 ToolPath 设置为 MSBuild14(默认为“C:\Program Files (x86)\MSBuild\14.0\Bin”)。

      2.签入此构建过程模板并重新排队构建。

      谢谢!

      【讨论】:

        【解决方案6】:

        构建过程决定了您使用的构建工具版本。 vanilla 构建定义使用“DefaultTemplate.11.1.xaml”构建过程模板,该模板配置为使用 Build Tools 2013。

        解决此问题的最快方法是简单地切换到“TfvcTemplate.12.xaml”

        如果要修改默认模板,则需要从 $/[Project]/BuildProcessTemplates/DefaultTemplate.11.1.xaml 中检出,然后编辑 Arguments 以设置 BuildProcessVersion

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-04-01
          • 2015-07-13
          • 2017-10-27
          • 2015-10-14
          • 2023-03-10
          • 2020-04-24
          • 1970-01-01
          • 2015-04-22
          相关资源
          最近更新 更多