Запуск MSBuild из PowerShell не может найти файл проекта [duplicate]

В сочетании PHP и MySQL двойные кавычки и одинарные кавычки значительно упрощают время написания запросов.

$query = "INSERT INTO `table` (`id`, `col1`, `col2`) VALUES (NULL, '$val1', '$val2')";

Теперь предположим, что вы используете прямую переменную post в MySQL-запросе, тогда используйте ее следующим образом:

$query = "INSERT INTO `table` (`id`, `name`, `email`) VALUES (' ".$_POST['id']." ', ' ".$_POST['name']." ', ' ".$_POST['email']." ')";

Это лучшая практика для использования переменных PHP в MySQL.

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

3 ответа

Проблемы, которые вы видите, являются результатом аргументов 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- Выражение, особенно если какая-либо часть строки, которая вызывается, предоставляется пользователем.

27
ответ дан Keith Hill 31 August 2018 в 21:04
поделиться

Вы также можете попробовать использовать бесплатный скрипт / модуль скрипта Invoke-MsBuild . Это, по сути, дает вам командлет Invoke-MsBuild PowerShell, который вы можете вызывать вместо того, чтобы пытаться самостоятельно вызвать файл msbuild.exe.

2
ответ дан Janus Troelsen 31 August 2018 в 21:04
поделиться

Ugh.

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

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

30
ответ дан Peter Seale 31 August 2018 в 21:04
поделиться
Другие вопросы по тегам:

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