具有多个DefineConstants的命令行msbuild

时间:2014-07-18 16:47:39

标签: powershell batch-file syntax msbuild

来自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"

3 个答案:

答案 0 :(得分:6)

两个想法:

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

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

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

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

答案 1 :(得分:5)

我们可以使用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

答案 2 :(得分:0)

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