Как передать значение свойства, содержащее точку с запятой, в командной строке MSBuild при запуске из PowerShell?

Я пытаюсь передать свойство MSBuild. Свойство представляет собой список значений, разделенных точкой с запятой. В отличие от этого вопроса, я использую MSBuild из PowerShell.

Я получил:

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

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

Если я запускаю ту же команду из командной строки, она работает нормально. Как мне заставить его работать в PowerShell?

3 ответа

Решение

Оберните параметр в одинарные кавычки:

... '/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
Другие вопросы по тегам