Подтвердить что ты не робот

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.

После этого он просто вешает навсегда. Любые предложения приветствуются.

4b9b3361

Ответ 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 &quot;&amp;{get-childitem}&quot;" />
  </Target>

Ответ 2

Try:

<Exec Command='$(PowerShellExe) -NonInteractive -executionpolicy Unrestricted -command "& {Get-ChildItem}"' />