Простая команда Powershell вешает Visual Studio 2010 в событии после сборки - PullRequest
2 голосов
/ 25 февраля 2011

У меня есть однострочная команда Powershell, которая отлично работает из командной строки.

Однако, когда я добавляю ее в команды пост-сборки моего проекта VS2010, она запускается, но затем просто зависает Visual Studio,Это почти как если бы Visual Studio просто сидела и ждала завершения команды Powershell, то есть командной строке просто нужно нажать клавишу ввода, чтобы закрыть окно или что-то в этом роде. Потому что загрузка ЦП очень низкая.

DoМне нужно сделать что-то особенное, чтобы обычная команда Powershell успешно выполнялась из окна VS2010 после сборки?

Команда:

[io.file]::WriteAllText('C:\test.js', ((gc C:\test.js) -replace 'HELLO','GOODBYE' -join "`r`n"))

Поэтому в VS я добавляюпрефикс для запуска его через Powershell, например так:

Powershell [io.file]::WriteAllText('C:\test.js', ((gc C:\test.js) -replace 'HELLO','GOODBYE' -join "`r`n"))

Обновление

В итоге все получилось.Спасибо всем за большой вклад.

Powershell -command "[io.file]::WriteAllText('C:\test.js', ((gc C:\.js) -replace 'HELLO','GOODBYE' -join \"`r`n\"))"

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011

Шаги после сборки выполняются cmd.exe, поэтому вам необходимо убедиться, что все экранировано для обработки PowerShell , а не cmd.exe.

В вашей команде cmd.exe попытается выполнить трубу и sc сам.Быстрый тест с текстовым файлом, переданным в sc.exe (утилита управления службой командной строки), показывает, что он показывает справку и ожидает ввода с клавиатуры при передаче неверной командной строки.

Я также предлагаю использовать полные имена командлетовчтобы избежать двусмысленности.

Команда должна выглядеть примерно так (тест в интерактивном режиме cmd.exe для подтверждения):

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -command "(get-content C:\www\js\test.min.js) -replace 'HELLO','GOODBYE' | set-content C:\www\js\test.min.js"

"

1 голос
/ 25 февраля 2011

Попробуйте:

gc C:\www\js\test.min.js -read 0

Или сначала сохраните результат из gc в локальную переменную, а затем вызовите sc.Существует открытый дескриптор чтения, который не позволяет PowerShell открывать файл для записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...