【问题标题】:Why doesn't Content Remove work for MSBuild ItemGroup?为什么内容删除不适用于 MSBuild ItemGroup?
【发布时间】:2010-09-08 20:27:09
【问题描述】:

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

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

调试消息仍然显示 @(Content) 包含不必要的 js 文件。谁能告诉我发生了什么?

【问题讨论】:

    标签: msbuild


    【解决方案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).
    

    你还有这个问题吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-08
      • 2018-08-24
      • 1970-01-01
      • 2015-05-05
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      相关资源
      最近更新 更多