2016-07-13 61 views
7

Sto utilizzando un progetto di build TFS per creare un progetto di Visual Studio 2015 che contiene un file gulp per compilare SASS tra le altre cose. Sto cercando di capire la sequenza di eventi usando i binding di MSBuild Task e Task Runner. Sembra che MSBuild sa abbastanza per rilevare e gestire la mia impostazione predefinita BeforeBuild compito sorso:Ordine degli eventi - binding di MSBuild e 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')); 
}); 

Sono ad usare un obiettivo MSBuild a rincorrere l'obiettivo BeforeBuild in modo che possa includere i file generati nel progetto per la pubblicazione:

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

Qui è la mia chiamata MSBuild nel mio accumulo .proj depositare presso le informazioni pertinenti:

<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"/> 

Queste due cose sembrano funzionare nel giusto ordine everyti io li corro. Ciò solleva tuttavia alcune domande:

  • Il binding "BeforeBuild" per Task Runner verrà eseguito prima del target "BeforeBuild" in MSBuild?
  • L'ordine dei binding/target è deterministico qui?
  • L'utilizzo della proprietà AfterTargets garantisce che venga eseguito dopo aver completato l'intera fase "BeforeBuild" (destinazioni e associazioni)?
  • In che modo MSBuild sa come utilizzare il mio file Gulp? Presumo che debba essere lo stesso meccanismo utilizzato dagli studi visivi.

risposta

1

Mi sono imbattuto nel problema in cui tutto funzionava localmente durante la creazione con il Task Runner, ma Gulp non è mai stato chiamato da MSBuild.

Mi sono ritrovato con la seguente soluzione, che estende l'attività Compile con il nostro target personalizzato GulpBuild. In questo frammento build è il nome del mio compito 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.

Problemi correlati