事件顺序 - MSBuild 和任务运行器绑定(Gulp)

7

我正在使用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 使用相同的机制。
2个回答

4
我遇到了一个问题,使用任务运行器构建时一切都在本地工作,但是MSBuild从未调用Gulp。
最终我采用了以下解决方案,它通过自定义目标GulpBuild扩展了Compile任务。在此片段中,build是我的Gulp任务的名称。
<PropertyGroup>
    <CompileDependsOn>
        $(CompileDependsOn);
        GulpBuild;
    </CompileDependsOn>
</PropertyGroup>
<Target Name="GulpBuild">
    <Exec Command="npm install" />
    <Exec Command="gulp build" />
</Target>

Steve Cadwallader的文章对解决这个问题非常有帮助。


0
我的解决方案与@agressen的非常相似,但是根据配置进行了更新和定制,参考了this answer
<Target Name="GulpBuildUAT" BeforeTargets="BeforeBuild" Condition="'$(Configuration)'=='UAT'">
        <Exec Command="npm install gulp" />
        <Exec Command="gulp build-release" />
    </Target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接