2010-03-09 126 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> 

這段代碼當然意味着你必須有一個構建目標,可能或不是這種情況。出於這個原因,你可能需要修改它。希望這可以幫助!