Używam projektu kompilacji TFS do zbudowania projektu Visual Studio 2015, który zawiera między innymi plik gulp do kompilowania SASS. Próbuję zrozumieć sekwencję zdarzeń za pomocą MSBuild Tasks i powiązania Task Runner. Wydaje się, że MSBuild wie tyle, aby wykryć i uruchomić domyślną BeforeBuild zadanie łyk:Kolejność zdarzeń - Wiązania MSBuild i 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'));
});
mam stosując cel MSBuild uruchomić po tarczy BeforeBuild tak, że mogę to wygenerowane pliki w projekcie do publikacji:
<Target Name="CopyGulpFiles" AfterTargets="BeforeBuild">
Tu jest moje wezwanie MSBuild w moim kompilacji .proj plik z odpowiedniej informacji:
<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"/>
te dwie rzeczy wydają się działać w odpowiedniej kolejności everyti ja je prowadzę. Nasuwa się jednak kilka pytań:
- Czy "BeforeBuild" wiążący dla Task Runner zostanie wykonany przed celem "BeforeBuild" w MSBuild?
- Czy porządek wiązań/celów jest tutaj deterministyczny?
- Czy przy korzystaniu z właściwości AfterTargets należy się upewnić, że zostanie ona uruchomiona po zakończeniu etapu "BeforeBuild" (cele i powiązania)?
- W jaki sposób MSBuild wie, jak używać mojego pliku Gulp? Zakładam, że musi to być ten sam mechanizm, jakiego używa studio visual.