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

如何使用TeamCity将此公共属性传递给MSBuild?,msbuild,teamcity,teamcity-7.0,Msbuild,Teamcity,Teamcity 7.0,我正在使用TeamCity Visual Studio runner。我想添加一个无法从Visual Studio访问的设置 /Property:FileAlignment=4096 我直接在构建步骤“命令行参数”中键入了该命令。构建日志显示错误: MSBuild命令行参数包含“/property:”或“/p:”参数。请改用生成参数 我不明白如何从TeamCity向MSBuild提供此信息并消除此警告 1.我应该使用哪种参数? 有三种: 配置参数 系统属性 环境变量 我不想要环境或系统变量

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

/Property:FileAlignment=4096
我直接在构建步骤“命令行参数”中键入了该命令。构建日志显示错误:

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

我不明白如何从TeamCity向MSBuild提供此信息并消除此警告

1.我应该使用哪种参数? 有三种:

  • 配置参数
  • 系统属性
  • 环境变量
我不想要环境或系统变量,因为我不希望这个构建依赖于任何外部的东西。我现在要尝试配置,但是我不确定我是否正确填充了它

2.我怎么知道这个参数实际上正在被使用? 构建日志似乎只有可导航/可折叠的xml级别,但没有说明构建参数

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

TeamCity会自动向实际的命令行提供系统变量(看起来Visual Studio运行程序运行的是
msbuild.exe
,而不是
devenv.exe
)。我猜TeamCity正在构建一个类似

cmd> msbuild.exe my-solution.sln /p:FileAlignment=4096
我在命令行上尝试了这个方法,只是为了确保它能正常工作(我添加了
/v:diagnostic
标志)。诊断详细性使msbuild将其所有属性打印到控制台。我验证了
FileAlignment=4096
在那里

/FileAlignment
属性似乎是自动出现在任何
.csproj
文件中的。所以你该走了。通过单击任何生成并查看“生成参数”选项卡,可以检查传递给生成的实际参数。有一个部分显示了“代理上的实际参数”。

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

嗨,安东尼,谢谢你的回复! 是的,命令行上的msbuild对我来说也很好,项目文件可能存储文件对齐属性。在我们的例子中,在与Microsoft讨论后,除了修复项目(我已经完成了)之外,似乎有必要在命令参数中指定解决方案范围(即构建范围)的对齐方式

在GUI项(/Build-Step/Command-line-parameters/)上指定的任何参数都不会出现在/Build-parameters/选项卡上。当然,有些根本不会编译

而且我在使用时有更奇怪的行为 /冗长:诊断性的 vs /冗长:最少 导致最小值的生成日志更长!似乎诊断是隐藏了一项特殊任务的细节,这是Teamcity的一部分,而不是我; [16:24:05]:使用项目“C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets”中的目标“SatelliteDllsProjectOutputGroup”覆盖项目“C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets”中的目标“SatelliteDllsProjectOutputGroup”。 我很难做到这一点,因为Teamcity生成的构建输出日志作为树状视图非常好。这适用于SLN构建,但使用任何bat文件都无法生成具有漂亮(大概是xml)树格式的日志文件


如果你有进一步的想法,我很乐意听到,谢谢你的编辑!:)

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

 devenv ..\..\mysolution.sln /Rebuild /Property:Config=Release;Platform=AnyCPU;Filealignment=512
然而,我想要的是让Teamcity的“VisualStudioBuild”接受该参数。这是通过以下方式实现的。在命令行参数框中,我输入了:

/Property:FileAlignment=filealignment v:diag
然后,生成参数的输出选项卡显示:

User Defined Parameters
Name                    Value passed to build
system.filealignment    512
system.verbosity        diagnostic
您应该使用“系统属性”。别担心名字,TeamCity就是这么叫的。它们是正则属性。您可以在“编辑配置设置>7.生成参数”中添加它们

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

名称:system.FileAlignment

类型:系统属性(系统)

价值:4096


请注意,TeamCity将坚持使用“system.”前缀。这并不重要,因为MSBuild脚本仍将其视为$(FileAlignment)

这是我最初添加我的问题作为评论的项目。我的问题没有得到回答。我不清楚吗?和/或我应该在那里发布一个问题作为“答案”吗?嗨,安东尼,谢谢!我认为我的问题是不同的,因为我没有试图在msbuild编译前/编译后脚本中获取要替换的变量,而是将其传递给msbuild本身的命令行。因为这个特定命令产生的结果很小,所以我很难验证它的工作情况。我在想,也许我至少应该先尝试一个更明显的选项,看看它是否“需要”。但我还是不知道该怎么做。。。(因此,在我看来,这个问题不仅仅是一个细节,但可能我错了。)这让我很困惑,直到我意识到“配置参数”不是“系统属性”(它们没有.System前缀)。如果需要,可以从“配置参数”轻松创建“系统属性”。