Я пытаюсь передать свойство MSBuild. Свойство представляет собой список значений, разделенных точкой с запятой. В отличие от этого вопроса, я запускаю MSBuild из PowerShell.
Я получаю:
PS> msbuild .\Foo.sln /p:PackageSources="\\server\NuGet;E:\NuGet"
MSBUILD : error MSB1006: Property is not valid.
Switch: E:\NuGet
Если я запускаю ту же команду из командной строки, она работает нормально. Как заставить его работать в PowerShell?
Ответ 1
Обведите параметр в одинарные кавычки:
... '/p:PackageSources="\\Server\NuGet;E:\NuGet"'
В PowerShell v3 попробуйте следующее:
msbuild .\Foo.sln --% /p:PackageSources="\\Server\NuGet;E:\NuGet"
Ответ 2
Также использование значения ascii может помочь:
msbuild.\Foo.sln/p: PackageSources = "\ Server\NuGet% 3BE:\NuGet"
Ответ 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