【问题标题】:command line msbuild with multiple DefineConstants具有多个 DefineConstants 的命令行 msbuild
【发布时间】:2014-09-09 21:24:17
【问题描述】:

从powershell

Set-Alias msbuild C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe

并从与我的 sln 文件相同的目录运行

> msbuild /nologo /property:DefineConstants=FOO

工作得很好。假设我需要两个构建时间常数。

> msbuild /nologo /property:DefineConstants=FOO;BAR

Powershell 将分号解释为语句结束并使用单个常量运行,然后尝试运行命令 BAR 和错误。所以不是我想要的。

怎么样?

> msbuild /nologo /property:DefineConstants="FOO;BAR"
MSBUILD : error MSB1006: Property is not valid.
Switch: BAR

这也不起作用。不确定这里发生了什么,但它似乎将“FOO;BAR”解释为某种单一的东西 - 而不是两个常量。

所以。我如何实际传递多个常量?

编辑 经过进一步调查,我在 cmd.exe 中运行以下命令

>C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe /nologo /property:DefineConstants=FOO;BAR
MSBUILD : error MSB1006: Property is not valid.
Switch: BAR

虽然这可行

>C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe /nologo /property:DefineConstants="FOO;BAR"

【问题讨论】:

    标签: powershell batch-file syntax msbuild


    【解决方案1】:

    两个想法:

    在属性标志周围添加引号并转义双引号

    msbuild /nologo "/property:DefineConstants=`"FOO;BAR`""
    

    使用呼叫运算符&(适用于 PS v4+)

    & msbuild /nologo /property:DefineConstants="FOO;BAR"
    

    【讨论】:

    • 应该注意,虽然这适用于 DefineConstants 属性,但如果路径包含空格,则它会破坏采用路径的内容。所以在这种情况下不要使用这个技巧。
    • @GeorgeMauer 命令行工具的字符串转义是 powershell 难以使用的领域之一。我注意到第二个选项在 4.0 版上对我有效,但在 3.0 版上无效。
    • @GeorgeMauer 你能举一个带空格的路径的例子吗?您是在谈论将属性设置为带有空格的路径还是仅是 proj/sln 文件的路径?
    • 在我的构建脚本中,我只是按照您的建议尝试转义所有/property:...,但这不起作用,因为其中一些是针对OutDir 之类的东西。只有转义 DefineConstants 子句才能正常工作
    • 您可以尝试在路径上使用单引号,例如msbuild "/OutDir:'\path\to the\output'"
    【解决方案2】:

    我们可以使用 msbuild 转义字符作为 msbuild /t:rebuild "/property:DefineConstants=PROD%3BCODE_ANALYSIS"。 %3B 在哪里使用;在属性中。

    https://msdn.microsoft.com/en-us/library/bb383819.aspx

    https://msdn.microsoft.com/en-us/library/ms228186.aspx

    【讨论】:

    • 令人惊讶的是,这仅在使用 xbuild 时对我有效(msbuild 失败)
    【解决方案3】:

    以上解决方案都不适合我,所以我不得不采用另一种方法:https://stackoverflow.com/a/32326853/544947

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2017-07-04
      • 2012-05-20
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多