我如何通过包含MSBuild的命令行上一个分号PowerShell的运行时,它的属性值?(How d

2019-07-31 01:09发布

我试图将属性传递到MSBuild的。 该物业是值的分号分隔的列表。 不像这个问题 ,我是从PowerShell中运行的MSBuild。

我得到:

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

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

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

Answer 1:

裹在单引号中的参数:

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

在PowerShell中v3的试试这个:

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


Answer 2:

还使用ASCII值可能会有所帮助:

。的msbuild \ Foo.sln / P:PackageSources = “\服务器\的NuGet%3BE:\的NuGet”



Answer 3:

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


文章来源: How do I pass a property value containing a semicolon on the MSBuild command line when running it from PowerShell?