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

作成者: Jason Lee

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

このトピックでは、Fabrikam, Inc という架空の会社のエンタープライズ展開要件に基づく一連のチュートリアルの一部を構成します。このチュートリアル シリーズでは、サンプル ソリューションである Contact Manager ソリューションを使用して、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなど、複雑さの現実的なレベルの Web アプリケーションを表します。

これらのチュートリアルの中心にある配置方法は、「プロジェクト ファイルの 理解」で説明されている分割プロジェクト ファイルのアプローチに基づいています。この方法では、ビルド プロセスは 2 つのプロジェクト ファイルによって制御されます。1 つは、すべての移行先環境に適用されるビルド命令を含み、1 つは環境固有のビルドと配置設定を含みます。 ビルド時に、環境固有のプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド手順の完全なセットが形成されます。

概要

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

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

既定では何が含まれますか?

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

既定では、このアプリケーションを実行するために必要なファイルのみがに設定されています。

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

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

Note

このファイルに含めるファイルを決定するロジック:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

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

場合によっては、展開するファイルとフォルダーをより細かく制御する必要があります。 事前に除外するファイルがわかっていて、除外がすべての宛先環境に適用される場合は、各ファイルの ビルド アクションNone に設定するだけです。

デプロイから特定のファイルを除外するには

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

ただし、この方法は常に便利であるとは限りません。 たとえば、対象の環境に応じて、および Visual Studio の外部から含まれるファイルとフォルダーを変更できます。 たとえば、Contact Manager サンプル ソリューションで、ContactManager.Mvc プロジェクトの内容を確認します。

ContactManager.Mvc プロジェクトの内容。

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

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

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

    Note

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

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

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

これは、この .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 パッケージからのファイルとフォルダーの除外

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

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

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

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

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

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

    [名前] ボックスに「project name.wpp.targets」と入力し、[追加] をクリックします。

    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 パッケージの配置」を参照してください。