パッケージ化処理のトラブルシューティング
作成者: Jason Lee
このトピックでは、Microsoft Build Engine (MSBuild) の EnablePackageProcessLoggingAndAssert プロパティを使用して、パッケージ化プロセスに関する詳細情報を収集する方法について説明します。
EnablePackageProcessLoggingAndAssert プロパティを true に設定すると、MSBuild は次の処理を行います。
- パッケージ化プロセスに関する追加情報をビルド ログに追加します。
- パッケージ化リストで重複するファイルが見つかった場合など、特定の条件下でエラーをログに記録します。
- ProjectName_Package フォルダーに Log ディレクトリを作成し、それを使用してパッケージ化するファイルに関する情報を記録します。
パッケージ化プロセスが失敗した場合、または Web 配置 パッケージに想定されるファイルが含まれていない場合は、この情報を使用してプロセスのトラブルシューティングを行い、問題が発生している場所を特定できます。
Note
EnablePackageProcessLoggingAndAssert プロパティは、デバッグ構成を使用してプロジェクトをビルドする場合にのみ機能します。 このプロパティは、他の構成では無視されます。
このトピックは、Fabrikam, Inc. という架空の会社のエンタープライズ配置要件を題材にしたチュートリアル シリーズの一部です。このシリーズでは、サンプル ソリューション (Contact Manager ソリューション) を使用して、現実的なレベルの複雑さを持った、ASP.NET MVC 3 アプリケーション、Windows Communication Foundation (WCF) サービス、データベース プロジェクトなどを含んだ Web アプリケーションを取り上げます。
これらのチュートリアルの核心である配置方法は、「プロジェクト ファイルについて」で説明した分割プロジェクト ファイルのアプローチを基にして、ビルド プロセスを 2 つのプロジェクト ファイル (すべての配置先環境に適用されるビルド命令を含んだファイルと、環境に特化したビルド設定や配置設定を含んだファイル) で制御するものになっています。 ビルド時には、環境に特化したプロジェクト ファイルが環境に依存しないプロジェクト ファイルにマージされ、ビルド命令の完全なセットが形成されます。
EnablePackageProcessLoggingAndAssert プロパティについて
Web アプリケーション プロジェクトのビルドとパッケージ化では、Web 発行パイプライン (WPP) が MSBuild の機能を拡張し、インターネット インフォメーション サービス (IIS) Web 配置ツール (Web 配置) と統合できるようにする一連の MSBuild ターゲットを提供する方法について説明しました。 Web アプリケーション プロジェクトをパッケージ化するときに、WPP ターゲットを呼び出します。
これらの WPP ターゲットの多くには、 EnablePackageProcessLoggingAndAssert プロパティが true に設定されている場合に追加情報をログに記録する条件付きロジックが含まれています。 たとえば、 パッケージ ターゲットを確認すると、 EnablePackageProcessLoggingAndAssert が true の場合、追加のログ ディレクトリが作成され、ファイルの一覧がテキスト ファイルに書き込まれることがわかります。
<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 プロパティの値を指定できます。
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 という名前の追加フォルダーを作成します。 ログ フォルダーには、次のさまざまなファイルが含まれています。
表示されるファイルの一覧は、プロジェクト内の内容とビルド プロセスによって異なります。 ただし、これらのファイルは通常、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 配置パッケージから特定のファイルとフォルダーを除外する方法のガイダンスについては、「配置からのファイルとフォルダーの除外」を参照してください。