2010-03-09 168 views
5

我有一个自定义的MSBuild任务,它接受一组JavaScript文件,将它们缩小并输出,扩展名为.min.js。当我通过Visual Studio进行常规构建时,它完美地工作,并且.min.js文件被输出到与原始文件相同的目录。当我尝试在Visual Studio中使用发布功能进行部署时,只有原始的.js文件才会将其发布到发布目录....我如何才能将我的任务输出计入“内容”,以便它结束在发布的文件夹?msbuild自定义任务

编辑: 我能够通过增加输出标记我的任务内,然后围绕创建的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> 

回答

0

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

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> 

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

相关问题