2010-03-03 54 views
0

我在我的csproj中定义了一个AfterCompile目标,它涉及缩小和组合JS和CSS。然后我将它们添加到ItemGroup Content并删除不必要的文件,但删除参数似乎不起作用。为什么不删除MSBuild ItemGroup的工作?

<Target Name="AfterCompile"> 
    <ItemGroup> 
    <JS_Combine Include="js\c??.*.min.js" /> 
    <CSS_Combine Include="css\c??.*.min.css" /> 
    </ItemGroup> 
    <!-- Combine JS --> 
    <ReadLinesFromFile File="%(JS_Combine.Identity)"> 
    <Output TaskParameter="Lines" ItemName="JSLines" /> 
    </ReadLinesFromFile> 
    <WriteLinesToFile File="js\combined.min.js" Lines="@(JSLines)" Overwrite="true" /> 
    <!-- Combine CSS --> 
    <ReadLinesFromFile File="%(CSS_Combine.Identity)"> 
    <Output TaskParameter="Lines" ItemName="CSSLines" /> 
    </ReadLinesFromFile> 
    <WriteLinesToFile File="css\combined.min.css" Lines="@(CSSLines)" Overwrite="true" /> 
    <!-- Tidy up --> 
    <ItemGroup> 
    <Content Include="js\combined.min.js" /> 
    <Content Include="css\combined.min.css" /> 
    <Content Remove="@(JS_Combine)" /> 
    <Content Remove="@(CSS_Combine)" /> 
    </ItemGroup> 
     <!-- DEBUG message --> 
    <Message Text="DEBUG: @(Content)" Importance="high" /> 
</Target> 

调试消息仍然显示@(内容)作为具有不必要的JS文件。谁能告诉我发生了什么?

回答

1

为了重现你的情况我创造了这个示例脚本

<Project DefaultTargets="Demo" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 

    <Target Name="Demo"> 
    <ItemGroup> 
     <JS_Combine Include="js\c01.min.js;js\c02.min.js;js\c03.min.js;" /> 
     <CSS_Combine Include="css\c01.min.css;css\c02.min.css;css\c03.min.css;" /> 
    </ItemGroup> 
    <ItemGroup> 
     <Content Include="@(JS_Combine);@(CSS_Combine)"/> 
    </ItemGroup> 

    <Message Text="Content Before: @(Content)" Importance="high" /> 
    <!-- Tidy up --> 
    <ItemGroup> 
     <Content Include="js\combined.min.js" /> 
     <Content Include="css\combined.min.css" /> 
     <Content Remove="@(JS_Combine)" /> 
     <Content Remove="@(CSS_Combine)" /> 
    </ItemGroup> 

    <Message Text="-------------------------"/> 
    <Message Text="Content After: @(Content)" Importance="high" /> 
    </Target> 

</Project> 

在这里工作对我来说是结果:

Project "C:\Data\Development\My Code\Community\MSBuild\RemoveTest\Remove01.proj" on node 
1 (default targets). 
Demo: 
    Content Before: js\c01.min.js;js\c02.min.js;js\c03.min.js;css\c01.min.css;css\c02.min.c 
    ss;css\c03.min.css 
    ------------------------- 
    Content After: js\combined.min.js;css\combined.min.css 
Done Building Project "C:\Data\Development\My Code\Community\MSBuild\RemoveTest\Remove01. 
proj" (default targets). 

你仍然有问题?