具有多个DefineConstants的命令行msbuild

Geo*_*uer 2 msbuild syntax powershell batch-file

来自powershell

Set-Alias msbuild C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
Run Code Online (Sandbox Code Playgroud)

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

> msbuild /nologo /property:DefineConstants=FOO
Run Code Online (Sandbox Code Playgroud)

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

> msbuild /nologo /property:DefineConstants=FOO;BAR
Run Code Online (Sandbox Code Playgroud)

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

怎么样?

> msbuild /nologo /property:DefineConstants="FOO;BAR"
MSBUILD : error MSB1006: Property is not valid.
Switch: BAR
Run Code Online (Sandbox Code Playgroud)

这也不起作用.不知道这里发生了什么,但它似乎将"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
Run Code Online (Sandbox Code Playgroud)

虽然这有效

>C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe /nologo /property:DefineConstants="FOO;BAR"
Run Code Online (Sandbox Code Playgroud)

Mik*_*ray 7

两个想法:

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

msbuild /nologo "/property:DefineConstants=`"FOO;BAR`""
Run Code Online (Sandbox Code Playgroud)

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

& msbuild /nologo /property:DefineConstants="FOO;BAR"
Run Code Online (Sandbox Code Playgroud)


小智 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

  • 令人惊讶的是,这只在使用 xbuild 时对我有用(它在 msbuild 中失败) (2认同)