来自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"
答案 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的地方;在属性。
答案 2 :(得分:0)
以上解决方案都不适合我,所以我不得不采用另一种方法:https://stackoverflow.com/a/32326853/544947