Как вызвать использование MSBuild from PowerShell и оператор?

установить свойство
app:layout_scrollFlags="scroll|enterAlways"
для дочернего представления android.support.design.widget.AppBarLayout

31
задан Karsten 7 February 2014 в 13:19
поделиться

2 ответа

Проблемы, возникающие в результате аргументов синтаксического анализа PowerShell. В первом примере, когда PowerShell видит $ a, он передает его как единственный параметр msbuild. Мы можем увидеть это с помощью утилиты echoargs из PSCX :.

PS> $a = "C:\some\project\or\other\src\Solution.sln /target:Clean /target:Build"
PS> & echoargs $a
Arg 0 is <C:\some\project\or\other\src\Solution.sln /target:Clean /target:Build>

Второй пример еще хуже, потому что вы говорите PowerShell вызвать "$ echoargs $ a" в качестве имени команды, а это не допустимое имя команды.

Третья строка работает, потому что CMD.exe получает развернутую форму «$ echoargs $ a» в качестве единственного аргумента, который анализирует и выполняет:

Здесь есть несколько вариантов. Сначала я делаю это так:

PS> & $msbuild C:\some\project\or\other\src\Solution.sln `
    /target:Clean /target:Build

Другой вариант - использовать Invoke-Expression следующим образом:

PS> Invoke-Expression "$msbuild $a"

В общем, я стараюсь быть очень осторожным с Invoke-Expression, особенно если какая-либо часть вызываемой строки предоставляется пользователь.

32
ответ дан 27 November 2019 в 21:54
поделиться

Тьфу.

$collectionOfArgs = @("C:\some\project\or\other\src\Solution.sln", 
    "/target:Clean", "/target:Build")
& $msbuild $collectionOfArgs

Это работает. & принимает набор аргументов, поэтому вы должны разделить строки, содержащие несколько аргументов, на набор строковых аргументов.

37
ответ дан 27 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: