【问题标题】:How do I pass this common property to MSBuild using TeamCity?如何使用 TeamCity 将此公共属性传递给 MSBuild?
【发布时间】:2012-02-07 07:29:54
【问题描述】:

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

/Property:FileAlignment=4096

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

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

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

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

有3种:

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

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

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

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

【问题讨论】:

  • 那是我最初添加我的问题作为评论的项目。那里没有回答我的问题。我不清楚吗?和/或我应该在那里发布一个问题作为“答案”吗?
  • 嗨,安东尼,谢谢!我决定我的问题不同,因为我不是试图让变量在 msbuild 预/后构建脚本中替换,而是传递给 msbuild 本身的命令行。因为这个特定的命令产生的结果很小,所以我很难验证它的工作原理。我在想也许我至少应该先尝试一个更明显的选项,看看它是否“需要”。但我仍然不确定该怎么做......(因此,在我看来,这个问题不仅仅是一个细节,但也许我错了。)

标签: msbuild teamcity teamcity-7.0


【解决方案1】:

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

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

名称:system.FileAlignment

类型:系统属性(system.)

值:4096

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

【讨论】:

  • 这让我很困惑,直到我意识到“配置参数”不是“系统属性”(它们没有 .system 前缀)。如果需要,您可以从“配置参数”轻松创建“系统属性”。
【解决方案2】:

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 文件中。所以你应该很高兴。您可以通过单击任何构建并查看“构建参数”选项卡来检查传递给构建的实际参数。有一个部分显示“代理上的实际参数”。

【讨论】:

    【解决方案3】:

    这已经解决了。为了澄清,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
    

    【讨论】:

      【解决方案4】:

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

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

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

      此外,我在使用时有更奇怪的行为 /详细程度:诊断 对比 /详细程度:最小 导致最小的构建日志更长!似乎诊断将详细信息隐藏在一项特殊任务中,这是 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)树格式的日志文件。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-05
        • 2011-02-26
        • 1970-01-01
        • 2012-10-02
        • 2015-10-08
        • 2017-04-01
        相关资源
        最近更新 更多