我正在使用TFS构建项目来构建一个包含gulpfile的Visual Studio 2015项目,用于编译SASS等其他内容。我正试图通过MSBuild任务和任务运行器绑定来理解事件序列。看起来MSBuild足够聪明以检测并在BeforeBuild之前运行我的默认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">
以下是我在构建.proj文件中使用的MSBuild调用及相关信息:
<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"/>
每次运行这两个操作似乎都按正确的顺序执行。但这也引发了一些问题:
- 在 MSBuild 中,Task Runner 的“BeforeBuild”绑定会在“BeforeBuild”目标之前执行吗?
- 这里的绑定和目标排序是否确定性的?
- 使用 AfterTargets 属性是否确保在“BeforeBuild”阶段(目标和绑定)全部完成后再运行它?
- MSBuild 如何知道如何使用我的 Gulp 文件?我假设它必须是与 Visual Studio 使用相同的机制。