Почему Content Remove не работает для MSBuild ItemGroup? - PullRequest
0 голосов
/ 03 марта 2010

У меня есть цель AfterCompile, определенная в моем csproj, которая включает минимизацию и комбинирование 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. Кто-нибудь может сказать мне, что происходит?

1 Ответ

1 голос
/ 11 марта 2010

Чтобы воссоздать вашу ситуацию, я создал этот пример сценария

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

У вас все еще есть проблемы с этим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...