TeamCity说在MSBuild步骤中使用"Build Parameters"而不是"/ property:".那是什么意思?

Ant*_*ean 77 msbuild teamcity

我有一个TeamCity服务器设置来完成我的CI构建.我正在构建和测试C#解决方案并运行一些自定义的MSBuild任务.其中一项任务是在构建输出中打印警告...

MSBuild命令行参数包含"/ property:"或"/ p:"参数.请改用Build Parameteres.

我不明白这意味着什么或如何删除它.谷歌不好(有或没有拼写错误).我从命令行运行任务(with /verbosity:diagnostic)并且它没有出现,所以我相信它是一个TeamCity消息.

MSBuild任务是

<Target Name="InstallDb">
  <MakeDir Directories="$(DbPath)" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseDrop.sql" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseCreate.sql -v DbPath=&quot;$(DbPath)&quot;" />
  <Exec Command="sqlcmd -S .\sqlexpress -i db\OmnyxDatabaseProgrammability.sql" />
</Target>
Run Code Online (Sandbox Code Playgroud)

相关的TeamCity步骤信息是

MSBuild版本:4.0
MSBuild ToolsVersion:4.0
运行平台:x64
目标:InstallDb
命令行参数:/property:DbPath=%env.DB_PATH%

man*_*lds 58

您必须添加Build ParametersProperties and environment的配置变量

`在此输入图像描述

因此,在Build Stepfor MSBUild 的命令行参数中,删除指定为的任何属性,/p:并将其中的每一个添加到Build Parameters(上面的屏幕截图)并给出值

  • 谢谢!这有效,但我不得不访问[this](http://confluence.jetbrains.net/display/TCD6/Defining+and+Using+Build+Parameters+in+Build+Configuration)doc来真正了解实现/用法. (8认同)
  • 如果在同一构建配置中有两个使用相同参数但不同值的MSBuild步骤,这似乎是一个问题.如果必须在"构建配置"级别定义它们,那么看起来不可能将同一个参数的不同值传递给构建步骤. (7认同)
  • @Anthony Mastrean是的 - "构建参数传递给构建.构建参数可以有两种类型:系统属性和环境变量.任何构建运行器都支持环境变量,但系统属性仅适用于具有属性概念的构建运行程序.例如,Command line runner不支持属性.` (5认同)
  • 这会很棒。除了它的一个错误。如果您希望将不同的参数传递给共享相同参数名称的两个不同构建步骤,该怎么办? (3认同)
  • 来自team city docs:配置参数提供了一种覆盖从模板继承的构建配置中的某些设置的方法.它们永远不会传递给构建版本. (2认同)
  • @TSmith - 真奇怪的是TeamCity*支持每步参数.如果将其转换为元编辑器并查看XML,则可以在每个步骤中看到它们.但是在UI中没有办法看到它. (2认同)

Ant*_*ean 39

这一切都发生在幕后!你只需遵循正确的惯例.在MSBuild脚本中,使用常规变量表示法

$(DbPath)
Run Code Online (Sandbox Code Playgroud)

在TeamCity中,您可以定义系统或env变量

system.DbPath
Run Code Online (Sandbox Code Playgroud)

TeamCity将自动将其所有system/env变量发送到您的MSBuild任务,删除'system'或'env'部分.而且您不必/property:DbPath=system.DbPath在TeamCity任务中写入.