2016-03-14 3 views
0

Я пытаюсь создать командную строку MSBUILD для публикации на сервере Jenkins с помощью PreBuildEvent для установки bower. Я уже пробовал несколько вариантов (см. Ниже), но вывод командной строки говорит, что сборка завершена без выполнения PreBuildSteps и без каких-либо ошибок.
Test1Командная строка MSBUILD PreBuildEvent для установки bower

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>True</ExcludeApp_Data> 
    <publishUrl>URL</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles> 
    <ExcludeFoldersFromDeployment>bower_components</ExcludeFoldersFromDeployment> 
    <ExcludeFilesFromDeployment>bower.json</ExcludeFilesFromDeployment> 
    </PropertyGroup> 
    <Target Name="BeforeBuild"> 
    <Exec Command="bower-installer -silent" /> 
    </Target> 
</Project> 

Test2

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemDefinitionGroup> 
     <PreBuildEvent> 
     <Command>bower-installer -silent</Command> 
     </PreBuildEvent> 
    </ItemDefinitionGroup> 
    <PropertyGroup> 
    <PreBuildEventUseInBuild>true</PreBuildEventUseInBuild> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>True</ExcludeApp_Data> 
    <publishUrl>URL</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles> 
    <ExcludeFoldersFromDeployment>bower_components</ExcludeFoldersFromDeployment> 
    <ExcludeFilesFromDeployment>bower.json</ExcludeFilesFromDeployment> 
    </PropertyGroup> 
</Project> 

командный Я выполнение заключается в следующем:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild "<PATH>\website.publishproj" /p:DeployOnBuild=true /p:PublishProfile="<PROFILE>" /p:VisualStudioVersion=14.0 

любой помощи, кто ??

+0

являются 'Test1' и' Test2' 'website.publishproj' или' 'в вашей командной строке msbuild? – m0sa

ответ

0

Я нашел решение ...

Все файлы были в правильном месте и операторы импорта были правильно определены, но если вы хотите, чтобы выполнить MSBuild из командной строки, вам нужно добавить дополнительные параметры.

.pubxml

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>FileSystem</WebPublishMethod> 
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish> 
    <ExcludeApp_Data>True</ExcludeApp_Data> 
    <publishUrl>URL</publishUrl> 
    <DeleteExistingFiles>True</DeleteExistingFiles> 
    <ExcludeFoldersFromDeployment>bower_components</ExcludeFoldersFromDeployment> 
    <ExcludeFilesFromDeployment>bower.json</ExcludeFilesFromDeployment> 
    </PropertyGroup> 
    <Target Name="BeforeBuild"> 
    <Exec Command="bower-installer -silent" /> 
    </Target> 
</Project> 

Командная строка

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild "<PATH>\website.publishproj" 
/t:BeforeBuild;Build /p:DeployOnBuild=true /p:PublishProfile="<PROFILE>" 
/p:VisualStudioVersion=14.0 

Хитрость в том, чтобы добавить /t:<Target Name>;Build (не забудьте добавить сборки являются иначе он будет выполнять только указанную мишень).

0

Цель BeforeBuild - это не то, что включено в MSBuild по умолчанию. Вам не хватает <Import>Microsoft.Web.Publishing.targets, который вы можете получить на своем сервере сборки, установив MSBuild.Microsoft.VisualStudio.Web.targets package.

Он определяет аналогичный процесс сборки, такой как общие цели msbuild. Фрагмент из файла Microsoft.Web.Publishing.targets:

<!-- Setup the minimum set of targets required --> 
<PipelineDependsOn Condition="!$(PipelineDependsOnBuild)"> 
    $(PipelineDependsOn); 
    BeforeBuild; 
    BuildOnlySettings; 
    ResolveReferences; 
    PrepareResourceNames; 
    ComputeIntermediateSatelliteAssemblies; 
    GetCopyToOutputDirectoryItems; 
    _SGenCheckForOutputs; 
</PipelineDependsOn> 

<PipelineDependsOn Condition="$(PipelineDependsOnBuild) And !$(_DeployOnBuild)"> 
    $(PipelineDependsOn); 
    Build; 
</PipelineDependsOn> 

<PipelineDependsOn Condition="!$(PipelineDependsOnBuild) And !$(_DeployOnBuild)" > 
    $(PipelineDependsOn); 
    AfterBuild; 
</PipelineDependsOn> 
+0

Спасибо за ответ. Я проверил файлы и все на месте. Также оператор import присутствует в файле publishproj. Однако PreBuild все еще не выполнен. Я попытался запустить ту же команду на машине разработки, и даже там она не работает ... Должен ли я добавить параметр в команду MSBUILD, которая говорит, что ему нужно выполнить некоторые шаги предварительной сборки? – BjoVa

+0

@BjoVa вы добавили '' to Test1 & 2? – m0sa

+0

:-) Я действительно сделал. Я только что видел, что я не упоминал об этом в комментарии ... – BjoVa

Смежные вопросы