Исключение при запуске сценария powershell из MSBuild Exec Task - PullRequest
3 голосов
/ 06 февраля 2011

У меня проблема с MSBuild и Powershell. Есть PS-скрипт, который я хочу выполнить в exec-Task MSBuild.

Проблема: Запуск скрипта напрямую из CMD работает, но при запуске скрипта в MSBuild появляется ошибка.

Вот скрипт MSBuild:

<Import Project="$(MSBuildExtensionsPath)\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

<PropertyGroup>  
    <PathToSvnClient>C:\Program Files (x86)\CollabNet\Subversion Client</PathToSvnClient>
</PropertyGroup>

<ItemGroup>
    <!-- set Folder to Svn Repository for svn info command-->
    <SvnFolder Include="$(MSBuildProjectDirectory)\.."/>
</ItemGroup>

<Target Name="SvnInfo">
    <!-- get SVN Revision and Repository Path -->
    <SvnInfo LocalPath="%(SvnFolder.FullPath)" ToolPath="$(PathToSvnClient)">
        <Output TaskParameter="Revision" PropertyName="Revision" />
        <Output TaskParameter="RepositoryPath" PropertyName="RepositoryPath" />
    </SvnInfo>
</Target>

<Target Name="SetProductVersion" DependsOnTargets="SvnInfo">
    <Exec Command="powershell -file &quot;Scripts\SetSth.ps1&quot; -PARAM &quot;$(PathToSth)&quot; -SVNID $(Revision) -SVNFOLDER &quot;$(RepositoryPath)&quot;" LogStandardErrorAsError="true" ContinueOnError="false"/>
</Target>

Команда выполняется точно так же, как и в CMD, но я получаю исключение из скрипта Powershell для параметра SVNFOLDER.

Команда, которая выполняется, выглядит следующим образом:

powershell -file "Scripts\SetSth.ps1" -PARAM "C:\abc\cde" -SVNID 1234
-SVNFOLDER "https://domain/svn/rep/branches/xy%20(Build%2012)" 

Так что из CMD это работает, изнутри MSBuild нет. Понятия не имею почему. Я надеюсь, у вас есть идея.

Ответы [ 2 ]

4 голосов
/ 07 апреля 2011

Как насчет этого подхода, играя с двойными и одиночными кавычками:

<Target Name="SetProductVersion" DependsOnTargets="SvnInfo">
    <Exec Command="powershell -command &quot;&amp; {Scripts\SetSth.ps1 -PARAM '$(PathToSth)' -SVNID '$(Revision)' -SVNFOLDER '$(RepositoryPath)'}&quot;" LogStandardErrorAsError="true" ContinueOnError="false"/>
</Target>
1 голос
/ 06 февраля 2011

Дважды проверьте ваши пути.

Помните, что PowerShell, вызываемый таким образом, запускается как Msbuild.exe под любым пользователем, выполняющим сборку. Для msbuild.exe прямой вызов cmd.exe начнется в рабочем каталоге, где находится msbuild.

Предположим, -file "Scripts\SetSth.ps1" ссылки C: \ users \ yourusername \ Scripts \ SetSth.ps1

Так что для вас вызов cmd.exe и запуск, который может работать нормально, b / c, ваш рабочий каталог будет соответствовать C: \ users \ yourusername

Для msbuild.exe он, вероятно, не может найти этот файл, так как он запускается примерно в * C: \ Windows \ Microsoft.NET \ Framework \ v4.0 *

Итак, он ищет C: \ Windows \ Microsoft.NET \ Framework \ v4.0 \ Scripts \ SetSth.ps1

Я бы попытался указать полный путь к этому файлу. Если это по-прежнему не работает, сделайте, чтобы cmd.exe выгрузил результаты в свойство, а msbuild - запишите его. Затем вы можете просмотреть пути.

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