15

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

我得到:

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

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

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

4

3 回答 3

22

将参数用单引号括起来:

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

在 PowerShell v3 上试试这个:

msbuild .\Foo.sln --% /p:PackageSources="\\Server\NuGet;E:\NuGet"
于 2012-08-17T07:11:19.013 回答
4

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

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

于 2017-05-30T10:39:16.500 回答
-1

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

    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

以下示例演示了Escape()函数的用法

    Set objShell = WScript.CreateObject("WScript.Shell")        
    objShell.Run "msbuild.exe echo.targets /p:Param1=""" & Escape("ParamValue1") & """,Param2=""" & Escape("ParamValue1") & """", 1, True
于 2016-10-03T21:35:29.167 回答