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