3

我即将进入 VS2008 / Framework 3.5 中的 Asp.Net MVC 1.0 项目的最后阶段,并尝试进行一些性能优化。在我的项目中,我使用了几个不同的“主题”,具体取决于登录用户的角色。我的主题文件夹结构是这样的......

\Themes
    \Theme1
        \Css
            \Folder1
                \CssFile1.css
                \CssFile2.css
            \Folder2
                \CssFile1.css
                \CssFile2.css
        \Images
            <Images go here>
     \Theme2
        \Css
            \Folder1
                \CssFile1.css
                \CssFile2.css
            \Folder2
                \CssFile1.css
                \CssFile2.css
        \Images
            <Images go here>

随着新客户的加入,新主题将添加到此文件夹结构中。

我正在使用雅虎!UI 库:用于 .Net 的 YUI Compressor(非常酷),用于缩小和合并我的 css(和 js)文件。

我按照http://yuicompressor.codeplex.com/wikipage?title=Sample%20MSBuild.xml%20File&ProjectName=yuicompressor上的示例通过构建后事件运行 MSBuild 脚本来执行缩小/合并任务。

一切都很好,除了当我<CssFiles Include="..\Themes\**\*.css" />在我的 ItemGroup 中使用类似的东西来指定从哪里获取 css 文件时,来自每个主题的所有 css 文件都被合并到一个文件中,就像这样......

\Themes
        \SylesSheetFinal.css

我想要的是只合并主题下的 css,为每个创建一个 css 文件......

\Themes
        \Theme1
            \StyleSheetFinal1.css
         \Theme2
            \StyleSheetFinal2.css

我对 MSBuild 真的很陌生。有谁知道我如何修改示例以自动遍历每个主题文件夹并为每个主题文件夹创建一个缩小/合并的样式表?主题可以经常添加或删除,因此我不想手动将每个主题路径包含到我的 ItemGroup 中。相反,我希望 MSBuild 脚本自动遍历主题根目录下的子文件夹,而不考虑文件夹的数量。

谢谢!

4

1 回答 1

3

您尝试做的事情可以通过batching来完成。批处理是对每个唯一批次执行一次特定任务(或目标)的过程。有两种类型的批处理;任务批处理和目标批处理。根据此处提供的信息,任务批处理是最常见的,也是我认为您需要的。批处理可能有点令人困惑,但一旦你掌握了它就不会太糟糕了。

配料总是涉及%()操作员。这是任务批处理的示例。

<Project ToolsVersion="3.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Batching01.proj -->
  <ItemGroup>
    <Files Include="src\Src01.cs"/>
    <Files Include="src\Src02.cs"/>
    <Files Include="src\Src03.cs"/>
    <Files Include="src\Src04.cs"/>
  </ItemGroup>

  <Target Name="Demo">
    <!-- Not batched, i.e. Files is flattened and sent to the Message task -->
    <Message Text="Files: @(Files)"/>

    <Message Text="================" Importance="high" />

    <Message Text="Filename: %(Files.Filename)" Importance="high" />
  </Target>
</Project>

输出将是:

  Files: src\Src01.cs;src\Src02.cs;src\Src03.cs;src\Src04.cs
  ================
  Filename: Src01
  Filename: Src02
  Filename: Src03
  Filename: Src04

在这篇文章中完全描述批处理太难了,但我已经汇总了一些非常棒的在线资源,网址为http://sedotech.com/Resources#Batching

于 2010-01-13T23:28:57.123 回答