如何使用TeamCity将此公共属性传递给MSBuild?

时间:2012-01-10 21:37:42

标签: msbuild teamcity teamcity-7.0

我正在使用TeamCity Visual Studio跑步者。我想添加一个无法从Visual Studio访问的设置。

/Property:FileAlignment=4096

我直接在构建步骤“命令行参数”中键入了它。构建日志显示错误:

  

MSBuild命令行参数包含“/ property:”或“/ p:”参数。请改用Build Parameters。

我不明白如何从TeamCity向MSBuild提供此功能并摆脱此警告!

1。我应该使用哪种参数?

有3种:

  • 配置参数
  • 系统属性
  • 环境变量。

我不想要环境或系统变量,因为我不希望此构建依赖于任何外部。我现在要尝试Config,但是我不确定我是否正确填写它。

2。我怎么能告诉这个参数实际上已被使用?

构建日志似乎只有他们的程序具有可导航/可折叠的xml级别,并没有说出构建参数。

4 个答案:

答案 0 :(得分:14)

您应该使用“系统属性”。不要担心名称,这就是TeamCity所称的名称。他们是常规财产。您可以在“编辑配置设置> 7.构建参数”中添加它们。

例如,您可以按如下方式添加系统属性:

  

名称:system.FileAlignment

     

类型:系统属性(系统。)

     

价值:4096

请注意,TeamCity将坚持使用“系统”。字首。这没关系,因为MSBuild脚本仍然会将其视为$(FileAlignment)。

答案 1 :(得分:4)

TeamCity documentation将构建参数定义为“将通用或特定于环境的设置传递到构建脚本的便捷方式”。配置参数提供了一种覆盖从模板继承的构建配置中的某些设置的方法。 它们永远不会传递给构建。系统和环境参数将提供给您的构建脚本。环境变量实际上是在系统上设置的(我找不到任何文档)。系统参数传递给脚本引擎

TeamCity自动为实际命令行提供系统变量(看起来Visual Studio运行器运行msbuild.exe而不是devenv.exe)。我猜TeamCity正在构建一个像

这样的命令
cmd> msbuild.exe my-solution.sln /p:FileAlignment=4096

我在命令行上尝试了这个,只是为了确保它应该工作(我添加了/v:diagnostic标志)。诊断详细程度使msbuild将所有属性打印到控制台。我确认FileAlignment=4096在那里。

/FileAlignment属性似乎是special property,它自动出现在任何.csproj文件中。所以你应该好好去。您可以通过单击任何构建并查看“构建参数”选项卡来检查传递给构建的实际参数。有一节显示“代理上的实际参数”。

答案 2 :(得分:1)

这已经解决了。为了澄清,Anthony告诉如何使用MSBuild在命令行中解决问题。它也可以使用devenv在命令行上解决,根据Microsoft的票证,语法为:

 devenv ..\..\mysolution.sln /Rebuild /Property:Config=Release;Platform=AnyCPU;Filealignment=512

然而,我想要的是让Teamcity的“Visual Studio Build”接受参数。这是通过以下方式实现的。在命令行参数框中,我输入了:

/Property:FileAlignment=filealignment v:diag

然后构建参数的输出选项卡显示:

User Defined Parameters
Name                    Value passed to build
system.filealignment    512
system.verbosity        diagnostic

答案 3 :(得分:0)

(这是评论的-754个字符,因此必须输入帖子)

你好,安东尼,谢谢你的回复! 是的,命令行上的msbuild也适用于我,项目文件可能存储FileAlignment属性。在我们的案例中,经过与Microsoft的讨论,除了修复项目(我已经完成)之外,我还必须指定解决方案范围内的构建范围对齐,即在命令参数中。

我在GUI项目上指定的参数(/ Build Step / Command line parameters /)将不会出现在选项卡/ Build Parameters /上。当然有些人根本不会编译。

此外,我在使用时有更奇怪的行为 /冗长:诊断 VS /冗长:最小 导致最小的构建日志!它似乎是诊断隐藏在特殊任务中的细节,这是Teamcity的一部分,而不是我; [16:24:05]:在项目“C:\ WINDOWS \”中覆盖项目“C:\ WINDOWS \ Microsoft.NET \ Framework \ v3.5 \ Microsoft.Common.targets”中的目标“SatelliteDllsProjectOutputGroup”,目标为“SatelliteDllsProjectOutputGroup” Microsoft.NET \框架\ v3.5版本\ Microsoft.WinFX.targets”。 我正在努力解决这个问题,因为Teamcity生成的构建输出日志非常适合作为TreeView。这适用于SLN构建,但使用任何bat文件都无法生成具有漂亮(xml,可能)树格式的日志文件。

如果您有进一步的想法,我会很乐意听到他们,并感谢您的编辑! :)