簡體   English   中英

從PowerShell運行時,如何在MSBuild命令行上傳遞包含分號的屬性值?

[英]How do I pass a property value containing a semicolon on the MSBuild command line when running it from PowerShell?

我正在嘗試將屬性傳遞給MSBuild。 該屬性是以分號分隔的值列表。 此問題不同,我正在從PowerShell運行MSBuild。

我明白了:

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

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

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

用單引號包裝參數:

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

在PowerShell v3上試試這個:

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

同樣使用ascii值可能會有所幫助:

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

下面的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM