我正在使用 TFS 构建项目来构建 Visual Studio 2015 项目,其中包含用于编译 SASS 的 gulpfile 等。我正在尝试使用 MSBuild Tasks 和 Task Runner 绑定来了解事件的顺序。看来 MSBuild 知道的足够多,可以检测和运行我的默认 gulp 任务 BeforeBuild:
/// <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"/>
每次我运行它们时,这两件事似乎都以正确的顺序运行。不过,这提出了一些问题:
- Task Runner 的“BeforeBuild”绑定会在 MSBuild 中的“BeforeBuild”目标之前执行吗?
- 绑定/目标的顺序在这里是确定的吗?
- 使用 AfterTargets 属性是否确保在整个“BeforeBuild”阶段(目标和绑定)完成后运行?
- MSBuild 如何知道如何使用我的 Gulp 文件?我认为它必须与 Visual Studio 使用的机制相同。