【问题标题】:Order of Events - MSBuild and Task Runner Bindings (Gulp)事件顺序 - MSBuild 和任务运行程序绑定 (Gulp)
【发布时间】:2016-07-13 17:57:15
【问题描述】:

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

【问题讨论】:

    标签: msbuild gulp task-runner-explorer


    【解决方案1】:

    我遇到了使用 Task Runner 构建时一切都在本地工作的问题,但 MSBuild 从未调用 Gulp。

    我最终得到了以下解决方案,它使用我们的自定义目标 GulpBuild 扩展了 Compile 任务。在这个 sn-p 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.

    【讨论】:

      猜你喜欢
      • 2015-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 2017-12-04
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多