BuildActivity 忽略 ToolsVersion
Posted
技术标签:
【中文标题】BuildActivity 忽略 ToolsVersion【英文标题】:BuildActivity ignores ToolsVersion 【发布时间】:2015-09-19 17:40:12 【问题描述】:我有一个在 BuildAgent 上运行的持续集成构建,但我无法正常工作。我最近将我们的代码库更改为 C# 6.0,并将项目更改为 ToolsVersion 14。
我确实在 Build Server (TFS 2012) 上安装了 Visual Studio 2015。如果我现在签入 C# 6.0 代码,则在第一个项目上构建失败(“$”是意外的或其他东西“)
BuildTemplate 是“DefaultTemplate.11.1” 如果我检查日志文件,构建会调用错误的 csc.exe (C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe)
如果我确实使用项目启动 MSBuild/14.0/Bin/MSBuild 可执行文件而没有任何开关,则构建成功。为什么 TFS BuildAgent 不使用 ToolsVersion 以及如何让 TFS 2012 构建我的 Visual Studio 2015 解决方案
如果我添加 MSBuildArgument /tv:14.0 它仍然失败。因为它调用了 MSBuild 版本 12,它是 Visual Studio 2015 附带的 .NET 4.6 RC 框架的一部分。
更改 MSBuild Activity 的 ToolsPath 确实可以使 Build 正常工作,但如果我尝试运行我的 UnitTest,则会出现问题。我得到一个缺少的 dll“Microsoft.VisualStudio.TestPlatform.Utilities.dll”异常。 (VS2012 也安装在 Build Server 上)。
更新: 现在我的单元测试确实出现了一个不同的错误:
TF900548: An error occurred publishing the Visual Studio test results.
Details: 'Method not found:
'System.Collections.Generic.IEnumerable<System.String>
Microsoft.VisualStudio.TestPlatform.Utilities.InferSettingsHelper.MergeRunSettingsAndFindCompatibleSources(Microsoft.VisualStudio.TestPlatform.ObjectModel.Architecture
ByRef,
Microsoft.VisualStudio.TestPlatform.ObjectModel.FrameworkVersion
ByRef, System.String, System.String,
System.Collections.Generic.IDictionary`2<System.String,System.Collections.Generic.KeyValuePair`2<Microsoft.VisualStudio.TestPlatform.ObjectModel.Architecture,Microsoft.VisualStudio.TestPlatform.ObjectModel.FrameworkVersion>>,
System.Xml.XPath.IXPathNavigable, System.String ByRef)'.'
【问题讨论】:
【参考方案1】:对于我们这些不是每天都生活在构建模板中的人来说,以下是让它为我工作的步骤:
首先找到与您的构建相关的模板(如果您已经知道在哪里可以找到它,请跳过几个步骤)。
只需右键单击构建定义并选择Edit build definition
选择Process
选项卡,您将看到模板的名称(如果您没有自定义它,很可能是 DefaultTemplate)。在最右侧单击Show details
以查看模板的路径。
Home
选项卡,然后单击Source control explorer
找到模板文件并双击进行编辑。它应该出现在这样的图形视图中。滚动直到找到Run MSBuild for Project
点击此项会立即弹出属性
单击右侧的小图标 - 不要尝试输入它,因为它可能会爆炸并导致 Visual Studio 崩溃。
输入以下"C:\Program Files (x86)\MSBuild\14.0\bin"
的引号
现在是最重要的部分
对我来说,Run MSBuild for Project
在两个地方。
所以我只是在两个地方重复了上述步骤,然后在我签入 .xaml
文件后,我的构建最终运行良好。
您可能需要从 TFS 工具中回收代理/控制器。
【讨论】:
似乎也对我有用,有完全相同的问题,但我们安装了 microsoft build tools (2015) 而不是 visual studio 2015。在 xaml 中设置 ToolPath 似乎是缺少的步骤.谢谢! TfvcTemplate.12.xaml 不包含 ToolPath...它在哪里? 对不起,我什至没有开始尝试理解这些 xaml 文件。但是,如果您有时间,您可能希望从 xaml 文件迁移到 TFS 2015 及更高版本中的新构建过程。无需学习疯狂的 xaml 即可更轻松地自己进行更改。 visualstudio.com/en-us/docs/build/define/create @Simon_Weaver:你救了我的头发。 你是个传奇!谢谢西蒙【参考方案2】:编辑模板将 msbuild 活动 ToolPath 更改为“MSBuild/14.0/Bin/MSBuild”
【讨论】:
如果我将构建模板中的 ToolPath 更改为 MSBuild,构建工作但我得到以下异常:TF900546:运行 RunTests 活动时发生意外错误:''codeBase' 不能为空细绳 (””)。参数名称:codeBase'。 正在运行代码覆盖。如果是,您可以禁用并测试一次 禁用代码覆盖确实有帮助。现在我收到以下错误无法加载文件或程序集 'Microsoft.VisualStudio.TestPlatform.Utilities, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。系统找不到指定的文件。 此 dll 是否存在于构建控制器中。如果是,请在 GAC 中注册Microsoft.TeamFoundation.Build.Activities.RunMSBuild
活动没有 ToolPath
属性 - 只有 ToolVersion
属性,这似乎没有改变原始问题提到的任何内容。这种活动类型似乎比Microsoft.TeamFoundation.Build.Workflow.Activities.MSBuild
活动更简单。它抽象了很多细节。【参考方案3】:
见答案by Marson。
使用 TfvcTemplate.12.xaml 构建过程模板和 /tv:14.0 构建参数对我有用。
【讨论】:
这不适用于 TFS 2012,因为 TfvcTemplate.12.xaml 仅适用于 TFS 2013+ @Lareau 我正在使用 TFS 2013 Update 4。感谢您指出这一点。我认为在 TFS 2012 上,接受的答案应该有效。对于 2013+,另请参阅我的回答 ***.com/a/33238651/1196586【参考方案4】:使用 msbuild 参数 /p:VisualStudioVersion=14.0
【讨论】:
如果您可以编辑模板,请将 msbuild 活动 ToolPath 更改为“MSBuild/14.0/Bin/MSBuild” 没有 ToolPath 了 使用MsBuild command prompt for VS2015
执行您的命令时出现以下错误文件名、目录名或卷标语法不正确。以上是关于BuildActivity 忽略 ToolsVersion的主要内容,如果未能解决你的问题,请参考以下文章