【问题标题】:msbuild custom taskmsbuild 自定义任务
【发布时间】:2010-03-09 16:26:42
【问题描述】:

我有一个自定义 MSBuild 任务,它接收一组 JavaScript 文件,将它们缩小并输出,扩展名为 .min.js。当我通过 Visual Studio 进行正常构建时,它运行良好,并且 .min.js 文件输出到与原始文件相同的目录。当我尝试使用 Visual Studio 中的发布功能进行部署时,只有原始的 .js 文件才能进入发布目录.... 我怎样才能让我的任务的输出被计为“内容”,以便它结束在已发布的文件夹中?

编辑: 我可以通过在我的任务中添加输出标签然后围绕它创建一个 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>

【问题讨论】:

    标签: visual-studio msbuild publish msbuild-task


    【解决方案1】:

    构建和发布是不同的目标。将目标添加到您的项目,将您的缩小抽象到它自己的目标,然后使 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>
    

    当然,这个 sn-p 意味着您必须有一个构建目标,这可能是也可能不是。出于这个原因,您可能需要修改它。希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      更改文件属性。检查这些文件的构建操作和复制到输出目录属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-10-29
        • 2012-03-16
        • 2011-11-27
        • 1970-01-01
        • 2011-05-26
        • 1970-01-01
        • 2013-03-04
        相关资源
        最近更新 更多