我正在使用TFS构建项目来构建一个Visual Studio 2015项目,该项目包含用于编译SASS的gulp文件。我试图了解使用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">
这是我的构建.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"/>
每次运行它们时,这两件事似乎都以正确的顺序运行。这提出了一些问题:
答案 0 :(得分:3)
我遇到了在使用Task Runner构建时本地一切正常的问题,但是Gulp从未被MSBuild调用过。
我最终得到了以下解决方案,该解决方案使用我们的自定义目标Compile
扩展了GulpBuild
任务。在此代码段build
中是我的Gulp任务的名称。
<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.
BeforeBuild
目标应始终在MSBuild中BeforeBuild
之前运行。 Task Runner特定于Visual Studio,因此只有在Visual Studio中构建时才会发生。