パッケージ化処理のトラブルシューティング

作成者: Jason Lee

このトピックでは、Microsoft Build Engine (MSBuild) の EnablePackageProcessLoggingAndAssert プロパティを使用して、パッケージ化プロセスに関する詳細情報を収集する方法について説明します。

EnablePackageProcessLoggingAndAssert プロパティを true に設定すると、MSBuild は次の処理を行います。

  • パッケージ化プロセスに関する追加情報をビルド ログに追加します。
  • パッケージ一覧で重複するファイルが見つかった場合など、特定の条件下でエラーをログに記録します。
  • ProjectName_Package フォルダーにログ ディレクトリを作成し、それを使用してパッケージ化するファイルに関する情報を記録します。

パッケージ化プロセスが失敗した場合、または Web デプロイ パッケージに想定されるファイルが含まれていない場合は、この情報を使用してプロセスのトラブルシューティングを行い、問題が発生している場所を特定できます。

Note

EnablePackageProcessLoggingAndAssert プロパティは、デバッグ構成を使用してプロジェクトをビルドする場合にのみ機能します。 プロパティは、他の構成では無視されます。

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

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

EnablePackageProcessLoggingAndAssert プロパティについて

Web アプリケーション プロジェクトのビルドとパッケージ 化では、Web 発行パイプライン (WPP) が MSBuild の機能を拡張し、インターネット インフォメーション サービス (IIS) Web 配置ツール (Web 配置) と統合できるようにする一連の MSBuild ターゲットを提供する方法について説明しました。 Web アプリケーション プロジェクトをパッケージ化するときに、WPP ターゲットを呼び出します。

これらの WPP ターゲットの多くには、 EnablePackageProcessLoggingAndAssert プロパティが true に設定されている場合に追加情報をログに記録する条件付きロジックが含 まれています。 たとえば、 パッケージ ターゲットを確認すると、 EnablePackageProcessLoggingAndAsserttrue の場合、追加のログ ディレクトリが作成され、ファイルの一覧がテキスト ファイルに書き込まれることがわかります。

<Target Name="Package"
        Condition="$(_CreatePackage)"
        DependsOnTargets="$(PackageDependsOn)">

    <!--Log the information  Set $(EnablePackageProcessLoggingAndAssert) to True        
                 if you want to see this information-->
    <MakeDir Condition="$(EnablePackageProcessLoggingAndAssert) And 
                        !Exists('$(PackageLogDir)')"
             Directories="$(PackageLogDir)" />
    <WriteLinesToFile Condition="$(EnablePackageProcessLoggingAndAssert)"
                      Encoding="utf-8"
                      File="$(PackageLogDir)\Prepackage.txt"
                      Lines="@(FilesForPackagingFromProject->'
                             From:%(Identity) 
                             DestinationRelativePath:%(DestinationRelativePath) 
                             Exclude:%(Exclude) 
                             FromTarget:%(FromTarget) 
                             Category:%(Category)
                             ProjectFileType:%(ProjectFileType)')" 
                      Overwrite="True" />

Note

WPP ターゲットは、%PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web フォルダーの Microsoft.Web.Publishing.targets ファイルで定義されています。 このファイルを開き、Visual Studio 2010 または任意の XML エディターでターゲットを確認できます。 ファイルの内容を変更しないように注意してください。

追加のログ記録を有効にする

EnablePackageProcessLoggingAndAssert プロパティの値は、プロジェクトのビルド方法に応じてさまざまな方法で指定できます。

コマンド ラインからプロジェクトをビルドする場合は、コマンド ライン引数として EnablePackageProcessLoggingAndAssert プロパティの値を指定できます。

MSBuild.exe /t:Build
            /p:Configuration=DEBUG
            /p:DeployOnBuild=true
            /p:DeployTarget=Package
            /p:EnablePackageProcessLoggingAndAssert=true
            [Your project].csproj

カスタム プロジェクト ファイルを使用してプロジェクトをビルドする場合は、MSBuild タスクの Properties 属性に EnablePackageProcessLoggingAndAssert 値を含めることができます。

<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
   <MSBuild Projects="@(ProjectsToBuild)"
            Properties="OutDir=$(OutputRoot);
                        Configuration=$(Configuration);
                        DeployOnBuild=true;
                        DeployTarget=Package;
                        EnablePackageProcessLoggingAndAssert=true"
            Targets="Build" />
  </Target>

Team Foundation Server (TFS) ビルド定義を使用してプロジェクトをビルドする場合は、MSBuild 引数行の EnablePackageProcessLoggingAndAssert プロパティの値を指定できます。Team Foundation Server (T F S) ビルド定義を使用してプロジェクトをビルドする場合は、MSBuild 引数で EnablePackageProcessLoggingAndAssert プロパティの値を指定できます。

Note

ビルド定義の作成と構成の詳細については、「 配置をサポートするビルド定義の作成」を参照してください。

または、すべてのビルドにパッケージを含める場合は、Web アプリケーション プロジェクトのプロジェクト ファイルを変更して 、EnablePackageProcessLoggingAndAssert プロパティを true に設定することもできます。 プロパティは、.csproj または .vbproj ファイル内の最初の PropertyGroup 要素に追加する必要があります。

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
  <PropertyGroup>
    <EnablePackageProcessLoggingAndAssert 
       Condition=" '$(EnablePackageProcessLoggingAndAssert)' == '' ">
         true
    </EnablePackageProcessLoggingAndAssert>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

ログ ファイルの確認

EnablePackageProcessLoggingAndAssert をtrue に設定して Web アプリケーション プロジェクトをビルドしてパッケージ化すると、MSBuild は ProjectName_Package フォルダーに Log という名前の追加フォルダーを作成します。 Log フォルダーには、さまざまなファイルが含まれています。

MSBuild は、ProjectName_Package フォルダーに Log という名前の追加フォルダーを作成します。

表示されるファイルの一覧は、プロジェクトとビルド プロセスの内容によって異なります。 ただし、これらのファイルは通常、WPP がパッケージ化のために収集しているファイルの一覧を、プロセスのさまざまな段階で記録するために使用されます。

  • PreExcludePipelineCollectFilesPhaseFileList.txt ファイルには、除外対象として指定されたファイルが削除される前に、MSBuild がパッケージ化のために収集するファイルが一覧表示されます。

  • AfterExcludeFilesFilesList.txt ファイルには、除外対象として指定されたファイルが削除された後に変更されたファイルの一覧が含まれます。

    Note

    パッケージ化プロセスからファイルとフォルダーを除外する方法の詳細については、「 展開からのファイルとフォルダーの除外」を参照してください。

  • AfterTransformWebConfig.txt ファイルには、Web.config変換が実行された後にパッケージ化のために収集されたファイルが一覧表示されます。 この一覧では、Web.Debug.configや Web.Release.config などの構成固有のWeb.config変換ファイルは、パッケージ化するファイルの一覧から除外されます。 変換された 1 つの Web.config がその場所に含まれます。

  • PostAutoParameterizationWebConfigConnectionStrings.txt ファイルには、Web.config ファイル内の接続文字列がパラメーター化された後のファイルの一覧が含まれます。 これは、パッケージをデプロイするときに、接続文字列をターゲット環境に適した設定に置き換えることができるプロセスです。

  • Prepackage.txt ファイルには、パッケージに含めるファイルの最終化されたビルド前の一覧が含まれています。

Note

追加のログ ファイルの名前は、通常、WPP ターゲットに対応します。 これらのターゲットを確認するには、%PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web フォルダー内の Microsoft.Web.Publishing.targets ファイルを調べることができます。

Web パッケージの内容が予期した内容でない場合は、これらのファイルを確認すると、プロセスで問題が発生した時点で識別するのに役立つ方法になる可能性があります。

まとめ

このトピックでは、MSBuild の EnablePackageProcessLoggingAndAssert プロパティを使用してパッケージ化プロセスのトラブルシューティングを行う方法について説明します。 ビルド プロセスにプロパティ値を指定するさまざまな方法について説明し、プロパティを true に設定したときに記録される追加情報について説明しました。

もっと読む

カスタム MSBuild プロジェクト ファイルを使用して配置プロセスを制御する方法の詳細については、「 プロジェクト ファイル について」および「 ビルド プロセスについて」を参照してください。 WPP とパッケージ化プロセスの管理方法の詳細については、「 Web アプリケーション プロジェクトのビルドとパッケージ化」を参照してください。 Web 展開パッケージから特定のファイルとフォルダーを除外する方法のガイダンスについては、「 展開からのファイルとフォルダーの除外」を参照してください。