TeamCity表示在MSBuild步骤中使用“ Build Parameters”而不是“ / property:”。那是什么意思?


80

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

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

我不明白这是什么意思或如何删除它。Google表现不佳(有或没有错字)。我从命令行(使用/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>

并且相关的TeamCity步骤信息是

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


5
@AnneTheAgile您只需添加一个TeamCity系统构建参数。它是您提到的三种构建参数类型之一。您将其命名为“ system。<名称-我的构建参数>”,并提供所需的值。TeamCity将自动将其发送到MSBuild。您可以在构建报告中检查参数的值。有一个用于列出所有参数的选项卡。
Anthony Mastrean 2012年

Answers:


58

您必须在配置中的变量Build Parameters下添加Properties and environment

`在此处输入图片说明

因此,在Build StepMSBUild的命令行参数中,删除指定为的任何属性,/p:然后将每个属性添加到Build Parameters(上面的屏幕截图)中,并提供值


5
@Anthony Mastrean呀-Build parameters are passed to a build. Build parameters can be of two types: system properties and environment variables. Environment variables are supported by any build runner, however system properties are only available for build runners with property notion. For example, Command line runner does not support properties.
manojlds

8
谢谢!这行得通,但是我必须访问文档才能真正了解实现/用法。
Anthony Mastrean 2011年

2
来自team city docs:配置参数提供了一种方法来覆盖从模板继承的构建配置中的某些设置。它们永远不会传递给构建。
topwik 2011年

8
如果在同一构建配置中有两个使用相同参数但值不同的构建版本的MSBuild步骤,这似乎是一个问题。如果必须在“构建配置”级别上定义它们,那么似乎不可能将同一参数的不同值传递给构建步骤。
TSmith

2
太好了 除了一个错误。如果要将不同的参数传递给共享相同参数名称的两个不同的构建步骤,该怎么办?
道格

39

这一切都在幕后发生!您只需要遵循正确的约定即可。在您的MSBuild脚本中,您使用常规变量表示法

$(DbPath)

在TeamCity中,您定义一个系统或环境变量

system.DbPath

TeamCity将自动将其所有系统/环境变量发送到您的MSBuild任务,从而删除“系统”或“环境”部分。而且您不必编写/property:DbPath=system.DbPathTeamCity任务。


根据docs,仅系统变量被注入脚本。
ladenedge 2011年

1
据我了解,环境变量在构建代理程序上被设置为实际环境变量。尽管它们可能不会像系统变量那样传递给构建脚本/步骤,但仍可以使用。MSBuild必须使用环境变量来为其提供值,$(MyVar)因为我有一个TeamCity环境变量,该变量为我用MSBuild调用的愚蠢cmd线工具提供了值。
安东尼·马斯特拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.