命令行msbuild使用多个DefineConstants



From powershell

Set-Alias msbuild C:WINDOWSMicrosoft.NETFramework64v4.0.30319MSBuild.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:WINDOWSMicrosoft.NETFramework64v4.0.30319MSBuild.exe /nologo /property:DefineConstants=FOO;BAR
MSBUILD : error MSB1006: Property is not valid.
Switch: BAR

>C:WINDOWSMicrosoft.NETFramework64v4.0.30319MSBuild.exe /nologo /property:DefineConstants="FOO;BAR"

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

两个想法:

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

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

使用呼叫操作符&(适用于PS v4+)

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

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

最新更新