14

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

/Property:FileAlignment=4096

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

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

我不明白如何从 TeamCity 向 MSBuild 提供这个并摆脱这个警告!

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

有3种:

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

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

2. 我怎么知道这个参数实际上正在被使用?

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

4

4 回答 4

14

您应该使用“系统属性”。不用担心名称,TeamCity 就是这样称呼它的。它们是常规属性。您可以在“Edit Configuration Settings > 7. Build Parameters”中添加它们。

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

名称:system.FileAlignment

类型:系统属性(system.)

价值:4096

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

于 2012-07-11T16:47:46.963 回答
4

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

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

cmd> msbuild.exe my-solution.sln /p:FileAlignment=4096

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

/FileAlignment属性似乎是任何文件中自动存在的特殊属性。.csproj所以你应该很高兴。您可以通过单击任何构建并查看“构建参数”选项卡来检查传递给构建的实际参数。有一个部分显示“代理上的实际参数”。

于 2012-01-11T22:29:16.733 回答
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
于 2012-06-25T19:11:55.253 回答
0

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

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

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

此外,我还有更奇怪的行为,使用 /verbosity:diagnostic vs /verbosity:minimal 会导致最小的构建日志更长!似乎诊断将详细信息隐藏在一项特殊任务中,这是 Teamcity 的一部分,而不是我;[16:24:05]:在项目“C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets”中使用项目“C:\WINDOWS\ Microsoft.NET\Framework\v3.5\Microsoft.WinFX.targets”。我正在为此苦苦挣扎,因为 Teamcity 生成的构建输出日志非常适合用作 TreeView。这适用于 SLN 构建,但使用任何 bat 文件都无法生成具有漂亮(可能是 xml)树格式的日志文件。

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

于 2012-01-12T22:17:18.707 回答