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>

新しい顧客が参加すると、新しいテーマがこのフォルダー構造に追加されます。

Yahoo!を利用しています。UI ライブラリ: css (および js) ファイルを縮小およびマージするための .Net 用の YUI Compressor (これは非常に優れています)。

http://yuicompressor.codeplex.com/wikipage?title=Sample%20MSBuild.xml%20File&ProjectName=yuicompressorの例に従って、ビルド後のイベントを介して MSBuild スクリプトを実行し、縮小/マージ タスクを実行しました。

ItemGroup のようなものを使用<CssFiles Include="..\Themes\**\*.css" />して css ファイルを取得する場所を指定すると、すべてのテーマのすべての css ファイルが次のように 1 つのファイルにマージされることを除いて、すべてがうまく機能します...

\Themes
        \SylesSheetFinal.css

代わりに、テーマの下の css のみをマージし、それぞれに 1 つの css ファイルを作成することです...

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

私はMSBuildに本当に慣れていません。サンプルを変更して各テーマ フォルダーを自動的に移動し、それぞれに縮小/マージされたスタイルシートを作成する方法を知っている人はいますか? テーマは頻繁に追加または削除できるため、ItemGroup に各テーマ パスを手動で含める必要はありません。代わりに、フォルダーの数に関係なく、MSBuild スクリプトが Themes ルートの下のサブフォルダーを自動的に移動するようにします。

ありがとう!

4

1 に答える 1

3

あなたがやろうとしていることは、バッチ処理で達成できます。バッチ処理は、固有のバッチごとに 1 回、特定のタスク(またはターゲット)を実行するプロセスです。バッチ処理には 2 つのタイプがあります。タスクのバッチ処理とターゲットのバッチ処理。ここで提供される情報に基づいて、タスクのバッチ処理が最も一般的であり、必要だと思います。バッチ処理はややこしいかもしれませんが、一度理解すればそれほど悪くはありません。

バッチ処理には常に%()オペレーターが関与します。タスクのバッチ処理の例を次に示します。

<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 に答える