2016-07-13 7 views
7

Ich verwende ein TFS-Erstellungsprojekt, um ein Visual Studio 2015-Projekt zu erstellen, das unter anderem eine Gulp-Datei zum Kompilieren von SASS enthält. Ich versuche, die Reihenfolge der Ereignisse mithilfe von MSBuild Tasks und Task Runner-Bindungen zu verstehen. Es scheint, dass MSBuild weiß genug, um zu erkennen und mein Standard-schluck Aufgabe Before laufen:Reihenfolge der Ereignisse - MSBuild- und Task Runner-Bindungen (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')); 
}); 

Ich bin ein MSBuild Ziel zu verwenden, nachdem das Before Ziel zu laufen, so dass ich die generierten Dateien in dem Projekt für die Veröffentlichung kann sein:

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

Hier ist mein MSBuild Anruf in meinem Build .proj mit der entsprechenden Info-Datei:

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

Diese beiden Dinge scheinen in der richtigen Reihenfolge everyti laufen Ich renne sie. Das wirft jedoch einige Fragen auf:

  • Würde die Bindung 'BeforeBuild' für Task Runner vor dem Ziel 'BeforeBuild' in MSBuild ausgeführt werden?
  • Sind die Reihenfolge der Bindungen/Ziele hier deterministisch?
  • Stellt die Verwendung der AfterTargets-Eigenschaft sicher, dass dies ausgeführt wird, nachdem die gesamte 'BeforeBuild'-Phase (Ziele und Bindungen) abgeschlossen ist?
  • Wie kann MSBuild meine Gulp-Datei verwenden? Ich gehe davon aus, dass es sich um den gleichen Mechanismus handelt, den Visual Studio verwendet.
  • Antwort

    1

    Ich stieß auf das Problem, wo alles beim Erstellen mit dem Task Runner lokal funktionierte, aber Gulp wurde nie von MSBuild aufgerufen.

    Ich endete mit der folgenden Lösung, die die Compile Aufgabe mit unserem benutzerdefinierten Ziel GulpBuild erweitert. In diesem Snippet build ist der Name meiner Gulp Aufgabe.

    <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.

    Verwandte Themen