从PowerShell运行时,如何在MSBuild命令行上传递包含分号的属性值?

时间:2012-08-16 12:43:06

标签: powershell msbuild

我正在尝试将属性传递给MSBuild。该属性是以分号分隔的值列表。与this question不同,我正在从PowerShell运行MSBuild。

我明白了:

PS> msbuild .\Foo.sln /p:PackageSources="\\server\NuGet;E:\NuGet"

MSBUILD : error MSB1006: Property is not valid.
Switch: E:\NuGet

如果我从命令提示符运行相同的命令,它可以正常工作。如何让它在PowerShell中运行?

3 个答案:

答案 0 :(得分:18)

用单引号包装参数:

... '/p:PackageSources="\\Server\NuGet;E:\NuGet"'

在PowerShell v3上试试这个:

msbuild .\Foo.sln --% /p:PackageSources="\\Server\NuGet;E:\NuGet"

答案 1 :(得分:1)

同样使用ascii值可能会有所帮助:

msbuild。\ Foo.sln / p:PackageSources =" \ Server \ NuGet%3BE:\ NuGet"

答案 2 :(得分:-1)

下面的

VBScript 函数可用于转义在双引号内传递给 MSBuild.exe 的属性值:

self.treetext.openPersistentEditor(item_1, 0)

以下示例演示了 Escape()函数

的用法
    Function Escape(s)
      Escape = s

      Set objRegEx = CreateObject("VBScript.RegExp") 

      objRegEx.Global = True 
      objRegEx.Pattern = "(\\+)?"""

      Escape = objRegEx.Replace(Escape,"$1$1\""") 

      objRegEx.Pattern = "(\\+)$"

      Escape = objRegEx.Replace(Escape,"$1$1") 
    End Function