我正在使用TFS构建项目来构建Visual Studio 2015项目,其中包含用于编译SASS的gulpfile。我正在尝试使用MSBuild任务和任务运行器绑定来理解事件的顺序。看起来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">
下面是我的build.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使用的机制相同。
2条答案
按热度按时间ldxq2e6h1#
我遇到的问题是,在使用Task Runner构建时,所有内容都在本地工作,但MSBuild从未调用Gulp。
最后,我采用了以下解决方案,它使用我们的自定义目标
GulpBuild
扩展了Compile
任务。在这个代码片段中,build
是我的Gulp任务的名称。Steve Cadwallader's post was very helpful in solving this issue.
BeforeBuild
目标应始终在BeforeBuild
之前运行。Task Runner是特定于Visual Studio的,因此只有在Visual Studio中构建时才会发生这种情况。ljsrvy3e2#
我的解决方案与@agressen的非常相似,但从this answer更新并根据配置进行定制: