2016-07-13 3 views
7

Я использую проект сборки TFS для создания проекта Visual Studio 2015, который содержит gulpfile для компиляции SASS между прочим. Я пытаюсь понять последовательность событий, используя команды MSBuild Tasks и Task Runner. Оказывается, что MSBuild знает достаточно, чтобы обнаружить и запустить мой по умолчанию BeforeBuild глотком задачи:Порядок событий - привязки MSBuild и Task Runner (Gulp)

/// <binding BeforeBuild='default' /> 
var gulp = require('gulp'); 
var sass = require('gulp-sass'); 
var importer = require('sass-importer-npm'); 

gulp.task('sass', function() { 
    return gulp.src([ 
    './sass/**/*.scss', 
    './node_modules/font-awesome/scss/**/*.scss' 
    ]) 
    .pipe(sass({ importer: importer }).on('error', sass.logError)) 
    .pipe(gulp.dest('./Content/css')); 
}); 

Я с использованием цели MSBuild для запуска после того, как цель BeforeBuild так, что я могу включать сгенерированные файлы в проекте для публикации:

<Target Name="CopyGulpFiles" AfterTargets="BeforeBuild"> 

Вот мой MSBuild вызов в моей сборке .proj файл с соответствующей информацией:

<ItemGroup> 
    <ProjectsToBuild Include="$(MSBuildThisFileDirectory)..\MyProject.sln"> 
     <AdditionalProperties> 
     VisualStudioVersion=$(VisualStudioVersion); 
     OutputPath=$(OutputRoot); 
     WebPublishMethod=FileSystem; 
     publishUrl=$(StageFolder); 
     DeployOnBuild=false; 
     DeployTarget=WebPublish; 
     PublishProfile=$(MSBuildThisFileFullPath) 
     </AdditionalProperties> 
    </ProjectsToBuild> 
    </ItemGroup> 

<MSBuild Projects="@(ProjectsToBuild)" Properties="Configuration=Dev"/> 

Эти две вещи, кажется, работают в everyti правильном порядке я бегу их. Это вызывает некоторые вопросы:

  • Будет ли привязка «BeforeBuild» для Task Runner выполняться до цели «BeforeBuild» в MSBuild?
  • Вы здесь: Определите порядок привязок/целей?
  • С помощью свойства AfterTargets убедитесь, что это выполняется после завершения стадии «BeforeBuild» (цели и привязки)?
  • Как MSBuild умеет использовать мой файл Gulp? Я предполагаю, что это должен быть тот же механизм, что и визуальная студия.

ответ

1

Я столкнулся с проблемой, когда все работало локально при построении с помощью Running Task, но Gulp никогда не вызывался MSBuild.

Я получил следующее решение, которое расширяет задачу Compile с помощью нашей целевой цели GulpBuild. В этом фрагменте build - это имя моей задачи Gulp.

<PropertyGroup> 
    <CompileDependsOn> 
     $(CompileDependsOn); 
     GulpBuild; 
    </CompileDependsOn> 
</PropertyGroup> 
<Target Name="GulpBuild"> 
    <Exec Command="npm install" /> 
    <Exec Command="gulp build" /> 
</Target> 

Steve Cadwallader's post was very helpful in solving this issue.

  • BeforeBuild цель должна всегда выполняться до BeforeBuild в MSBuild. Task Runner специфичен для Visual Studio, поэтому это произойдет только при создании в Visual Studio.
  • This will help with your questions about ordering.
Смежные вопросы