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

x6h2sr28  于 2023-06-20  发布在  Gulp
关注(0)|答案(2)|浏览(215)

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

ldxq2e6h1#

我遇到的问题是,在使用Task Runner构建时,所有内容都在本地工作,但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's post was very helpful in solving this issue.

ljsrvy3e

ljsrvy3e2#

我的解决方案与@agressen的非常相似,但从this answer更新并根据配置进行定制:

<Target Name="GulpBuildUAT" BeforeTargets="BeforeBuild" Condition="'$(Configuration)'=='UAT'">
        <Exec Command="npm install gulp" />
        <Exec Command="gulp build-release" />
    </Target>

相关问题