配置からファイルとフォルダーを除外する

作成者: Jason Lee

このトピックでは、Web アプリケーション プロジェクトをビルドしてパッケージ化するときに、Web 配置パッケージからファイルやフォルダーを除外する方法について説明します。

このトピックは、Fabrikam, Inc. という架空の会社のエンタープライズ配置要件を題材にしたチュートリアル シリーズの一部です。このシリーズでは、サンプル ソリューション (Contact Manager ソリューション) を使用して、現実的なレベルの複雑さを持った、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなどを含んだ Web アプリケーションを取り上げます。

これらのチュートリアルの核心である配置方法は、「プロジェクト ファイルについて」で説明した分割プロジェクト ファイルのアプローチを基にして、ビルド プロセスを 2 つのプロジェクト ファイル (すべての配置先環境に適用されるビルド命令を含んだファイルと、環境に特化したビルド設定や配置設定を含んだファイル) で制御するものになっています。 ビルド時には、環境に特化したプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド命令の完全なセットが形成されます。

概要

Visual Studio 2010 で Web アプリケーション プロジェクトをビルドする場合、Web 発行パイプライン (WPP) を使用すると、このビルド プロセスを拡張できます。これは、コンパイルされた Web アプリケーションを配置可能な Web パッケージにパッケージ化することで行います。 その後、インターネット インフォメーション サービス (IIS) Web 配置ツール (Web Deploy) を使用してこの Web パッケージをリモート IIS Web サーバーに配置するか、IIS マネージャーを使用して Web パッケージを手動でインポートできます。 このパッケージ化プロセスについては、「Web アプリケーション プロジェクトのビルドとパッケージ化」で説明しています。

Web パッケージに何を含めるかを制御するにはどうすればよいでしょうか。 Visual Studio のプロジェクト設定は、基になるプロジェクト ファイルを使用して、さまざまなシナリオに対する十分な制御を実現します。 ただし、場合によっては、特定の配置先環境に合わせて、Web パッケージの内容を調整することが必要になる場合があります。 たとえば、アプリケーションをテスト環境に配置するときはログ ファイルのフォルダーを含め、ステージング環境または運用環境にアプリケーションを配置するときはフォルダーを除外することができます。 このトピックでは、これを行う方法について説明します。

既定で含まれるもの

Visual Studio で Web アプリケーション プロジェクトのプロパティを構成するときは、[Web のパッケージ化/公開] ページの [配置する項目] リストで、Web 配置パッケージに含める内容を指定できます。 既定では、これは [このアプリケーションの実行に必要なファイルのみ] に設定されています。

By default, this is set to Only files needed to run this application.

[このアプリケーションの実行に必要なファイルのみ] を選択すると、WPP は Web パッケージに追加するファイルの決定を試みます。 これには、次のものが含まれます。

  • プロジェクトのすべてのビルド出力。
  • コンテンツのビルド アクションでマークされたファイル。

Note

どのファイルを含めるかを決めるロジックは、このファイルに含まれています:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

特定のファイルやフォルダーの除外

場合によっては、配置するファイルやフォルダーをより細かく制御することが必要になります。 事前に除外するファイルがわかっていて、その除外動作が、対象となるすべての環境に適用される場合は、各ファイルの [ビルド アクション][なし] に設定するだけです。

配置から特定のファイルを除外するには

  1. ソリューション エクスプローラー ウィンドウでファイルを右クリックし、[プロパティ] をクリックします。
  2. プロパティ ウィンドウの [ビルド アクション] 行で、[なし] を選択します。

ただし、この方法は必ずしも便利であるとは限りません。 たとえば、どのファイルやフォルダーを含めるかを、対象の環境に応じて変えたり、Visual Studio 外から行ったりする場合があります。 たとえば、Contact Manager のサンプル ソリューションで、ContactManager.Mvc プロジェクトの内容を見てみましょう。

The contents of the ContactManager.Mvc project.

  • Internal フォルダーには、開発者が開発目的でローカル データベースを作成、削除、設定するために使用するいくつかの SQL スクリプトが含まれています。 このフォルダーの中身は、ステージング環境や運用環境に配置しないでください。
  • Scripts フォルダーには、いくつかの JavaScript ファイルが含まれています。 これらのファイルの多くは、デバッグをサポートしたり、Visual Studio で IntelliSense を提供したりするためだけの目的で含まれています。 そのうちの一部のファイルは、ステージング環境または運用環境には配置できません。 ただし、トラブルシューティングを容易にするために、開発者のテスト環境に配置する場合もあります。

プロジェクト ファイルを操作して特定のファイルやフォルダーを除外することもできますが、もっと簡単な方法があります。 WPP には、ExcludeFromPackageFoldersExcludeFromPackageFiles という名前の項目リストを作成して、ファイルとフォルダーを除外するメカニズムがあります。 これらのリストに独自の項目を追加することで、このメカニズムを拡張できます。 これを行うには、次の高度な手順を完了する必要があります。

  1. [プロジェクト名].wpp.targets という名前のカスタム プロジェクト ファイルをプロジェクト ファイルと同じフォルダーに作成します。

    Note

    .wpp.targets ファイルは、ビルドと配置のプロセスを制御するために使用するカスタム プロジェクト ファイルと同じフォルダーではなく、Web アプリケーション プロジェクト ファイルと同じフォルダー (ContactManager.Mvc.csproj など) に配置する必要があります。

  2. .wpp.targets ファイルに ItemGroup 要素を追加します。

  3. ItemGroup 要素に ExcludeFromPackageFoldersExcludeFromPackageFiles 項目を追加し、必要に応じて特定のファイルとフォルダーを除外します。

これは、この .wpp.targets ファイルの基本的な構造です。

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>   
    <ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFolders>
    <ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

各項目には、FromTarget という名前の項目メタデータ要素が含まれていることに注意してください。 これは、ビルド プロセスに影響しない省略可能な値で、単に、誰かがビルド ログを確認したときに、なぜ特定のファイルまたはフォルダーが省略されているかがわかるようにするためのものです。

Web パッケージからのファイルとフォルダーの除外

次の手順では、Web アプリケーション プロジェクトに .wpp.targets ファイルを追加する方法と、そのファイルを使用して、プロジェクトのビルド時に特定のファイルとフォルダーを Web パッケージから除外する方法を示します。

Web 配置パッケージからファイルとフォルダーを除外するには

  1. Visual Studio 2010 でソリューションを開きます。

  2. ソリューション エクスプローラー ウィンドウで、Web アプリ プロジェクト ノード (ContactManager.Mvc など) を右クリックして [追加] をポイントし、[新しい項目] をクリックします。

  3. [新しい項目の追加] ダイアログ ボックスで [XML ファイル] テンプレートを選択します。

  4. [名前] ボックスに「[プロジェクト名].wpp.targets (ContactManager.Mvc.wpp.targets など)」と入力し、[追加] をクリックします。

    In the Name box, type project name.wpp.targets, and then click Add.

    Note

    プロジェクトのルート ノードに新しい項目を追加すると、プロジェクト ファイルと同じフォルダーにファイルが作成されます。 これを確認するには、Windows エクスプローラーでフォルダーを開きます。

  5. ファイルに Project 要素と ItemGroup 要素を追加します。

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>    
      </ItemGroup>
    </Project>
    
  6. Web パッケージからフォルダーを除外する場合は、ExcludeFromPackageFolders 要素を ItemGroup 要素に追加します。

    1. Include 属性で、除外するフォルダーをセミコロンで区切ったリストを指定します。

    2. FromTarget メタデータ要素で、フォルダーが除外された理由を示す、意味のある値 (.wpp.targets ファイルの名前など) を指定します。

      <ExcludeFromPackageFolders Include="Internal">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFolders>
      
  7. Web パッケージからファイルを除外する場合は、ExcludeFromPackageFiles 要素を ItemGroup 要素に追加します。

    1. Include 属性で、除外するファイルをセミコロンで区切ったリストを指定します。

    2. FromTarget メタデータ要素で、ファイルが除外された理由を示す、意味のある値 (.wpp.targets ファイルの名前など) を指定します。

      <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFiles>
      
  8. [プロジェクト名].wpp.targets ファイルは次のようになります。

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>   
        <ExcludeFromPackageFolders Include="Internal">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFolders>
        <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-
    vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFiles>
      </ItemGroup>
    </Project>
    
  9. [プロジェクト名].wpp.targets ファイルを保存して閉じます。

次に Web アプリケーション プロジェクトをビルドしてパッケージ化すると、WPP によって .wpp.targets ファイルが自動的に検出されます。 指定したファイルとフォルダーは、Web パッケージには含まれません。

まとめ

このトピックでは、Web アプリケーション プロジェクト ファイルと同じフォルダーにカスタムの .wpp.targets ファイルを作成することで、Web パッケージをビルドするときに特定のファイルとフォルダーを除外する方法について説明しました。

もっと読む

カスタム Microsoft Build Engine (MSBuild) プロジェクト ファイルを使用して配置プロセスを制御する方法の詳細については、「プロジェクト ファイルについて」と「ビルド処理について」を参照してください。 パッケージ化と配置のプロセスの詳細については、「Web アプリケーション プロジェクトのビルドとパッケージ化」、 「Web パッケージ配置のパラメーターの構成」、「Web パッケージの配置」を参照してください。