Exec powershell.exe зависает msbuild
В настоящее время я изучаю вопрос о том, чтобы развернуть нашу взломанную систему развертывания с чем-то более элегантным - Octopus. При этом я пытаюсь получить VS для упаковки проекта при запуске сборки. Ну, у меня есть эта фантазия powershell script написанная и работающая, но когда я пытаюсь EXEC из msbuild script, визуальная студия просто висит!
Сначала я подозревал, что в оболочке сбежал материал, но я упростил его до смешного, и он все еще зависает.
Вот соответствующий код MsBuild:
<PropertyGroup>
<PowerShellExe Condition=" '$(PowerShellExe)'=='' ">
%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe
</PowerShellExe>
</PropertyGroup>
<Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command get-childitem" />
</Target>
Все, что он должен сделать, это предоставить список каталогов. Вызов этого из cmd.exe отлично работает:
C:\Users\smithj>%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe -noninteractive -executionpolicy unrestricted -command dir
Попытка:
msbuild Solution.sln /p:Configuration=Release
Получает это:
AfterBuild:
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\\tf.exe" che
ckout Package.nuspec
Package.nuspec
%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe
-NonInteractive -executionpolicy Unrestricted -command dir
Windows PowerShell
Copyright (C) 2009 Microsoft Corporation. All rights reserved.
После этого он просто вешает навсегда. Любые предложения приветствуются.
Ответы
Ответ 1
Не уверен, что вам понравится ответ.
После небольшой игры, похоже, речь идет о расширении группы свойств. Вы добавили новую строку в значение PowerShellExe.
Это отлично работает:
<PropertyGroup>
<PowerShellExe Condition=" '$(PowerShellExe)'=='' ">$(WINDIR)\System32\WindowsPowerShell\v1.0\powershell.exe</PowerShellExe>
</PropertyGroup>
<Target Name="AfterBuild">
<Exec Command="$(PowerShellExe) -NonInteractive -executionpolicy bypass -command "&{get-childitem}"" />
</Target>
Ответ 2
Try:
<Exec Command='$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command "& {Get-ChildItem}"' />