MSBuild自定义任务

5
我有一个自定义的MSBuild任务,它接收一组JavaScript文件,将它们压缩,并输出扩展名为.min.js的文件。当我通过Visual Studio进行正常构建时,它能完美地工作,并将.min.js文件输出到与原始文件相同的目录中。但是,当我尝试使用Visual Studio中的发布功能进行部署时,只有原始的.js文件被传输到发布目录中... 我应该如何让我的任务输出被视为“内容”,以便最终出现在发布的文件夹中?
编辑: 我通过在任务内添加Output标记,然后在其周围创建一个ItemGroup来解决了这个问题:
<Target Name="AfterBuild">      
    <ItemGroup>
        <JavaScriptFiles Include="Scripts\*.js" Exclude="Scripts\*.min.js" />
    </ItemGroup>
    <JsCompress Files="@(JavaScriptFiles)" OutputPath="Scripts">
        <Output TaskParameter="CompressedFiles" ItemName="CompressedFiles" />
    </JsCompress>
    <ItemGroup>
        <Content Include="@(CompressedFiles)" />
    </ItemGroup>
</Target>
2个回答

2

构建和发布是不同的目标。向您的项目添加一个目标,将您的缩小代码抽象为自己的目标,然后使AfterBuild和Publish目标依赖于缩小目标。类似这样:

  <Target Name="AfterBuild" DependsOnTargets="Build;Minify">
  </Target>
  <Target Name="Publish" DependsOnTargets="Build;Minify">
  </Target>
  <Target Name="Minify" DependsOnTargets="Build">
    <ItemGroup>
      <JavaScriptFiles Include="Scripts\*.js" Exclude="Scripts\*.min.js" />
    </ItemGroup>
    <JsCompress Files="@(JavaScriptFiles)" OutputPath="Scripts">
      <Output TaskParameter="CompressedFiles" ItemName="CompressedFiles" />
    </JsCompress>
    <ItemGroup>
      <Content Include="@(CompressedFiles)" />
    </ItemGroup>
  </Target>

当然,这段代码意味着你必须有一个构建目标,这可能是或不是情况。因此,您可能需要进行修改。希望这可以帮助!


0

修改文件属性。检查这些文件的生成操作和复制到输出目录属性。


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