visual-studio - msbuild 自定义任务

标签 visual-studio msbuild publish msbuild-task

我有一个自定义 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>

最佳答案

构建和发布是独立的目标。向您的项目添加一个目标,将您的缩小抽象为它自己的目标,然后使 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>

当然,这个片段意味着你必须有一个构建目标,这可能是也可能不是。因此,您可能需要修改它。希望这可以帮助!

关于visual-studio - msbuild 自定义任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2410615/

相关文章:

regex - 在 Visual Studio 2010 中,如何搜索不在单行注释中的文本?

visual-studio-2010 - Visual Studio 启动时间为 2012 年而非 2010 年

c++ - Visual Studio 14.0 和 Windows 工具包中的错误包括文件夹

visual-studio - 有没有办法从 msbuild 获取属性的值?

msbuild - 命令行包 Service Fabric 应用程序

c# - 我们如何使用 Visual Studio 2008 发布一个 asp.net 网站?

scala - 设置 scala.js 交叉编译库

android - 无法在Google Play商店上发布Xamarin.Forms App的APK文件

asp.net - Visual Studio 2008 有时无法打开 .aspx html 标记

python - 吉普错误!堆栈错误 : `C:\Program Files (x86)\MSBuild\12.0\bin\msbuild.exe` failed with exit code: 1