Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio msbuild自定义任务_Visual Studio_Msbuild_Publish_Msbuild Task - Fatal编程技术网

Visual studio msbuild自定义任务

Visual studio msbuild自定义任务,visual-studio,msbuild,publish,msbuild-task,Visual Studio,Msbuild,Publish,Msbuild Task,我有一个自定义的MSBuild任务,它接收一组JavaScript文件,缩小它们,然后输出它们,扩展名为.min.js。当我通过VisualStudio进行正常构建时,它可以完美地工作,并且.min.js文件被输出到与原始文件相同的目录中。当我尝试在VisualStudio中使用发布功能进行部署时,只有原始的.js文件才能进入发布目录。。。。我如何将任务的输出计算为“内容”,以便它最终进入已发布的文件夹 编辑: 我可以通过在任务中添加Output标记,然后围绕该标记创建一个ItemGroup来解

我有一个自定义的MSBuild任务,它接收一组JavaScript文件,缩小它们,然后输出它们,扩展名为.min.js。当我通过VisualStudio进行正常构建时,它可以完美地工作,并且.min.js文件被输出到与原始文件相同的目录中。当我尝试在VisualStudio中使用发布功能进行部署时,只有原始的.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>


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

生成和发布是单独的目标。将目标添加到项目中,将缩小抽象为自己的目标,然后使后构建和发布目标依赖于缩小目标。大概是这样的:

  <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>

当然,这段代码意味着您必须有一个构建目标,这可能是事实,也可能不是事实。因此,您可能需要对此进行修改。希望这有帮助