Řešení potíží s procesem vytváření balíčku
Toto téma popisuje, jak můžete shromažďovat podrobné informace o procesu balení pomocí vlastnosti EnablePackageProcessLoggingAndAssert v Microsoft Build Engine (MSBuild).
Když nastavíte vlastnost EnablePackageProcessLoggingAndAssert na hodnotu true, nástroj MSBuild:
- Do protokolů sestavení přidejte další informace o procesu balení.
- Za určitých podmínek protokolují chyby, například pokud jsou v seznamu balíčků nalezeny duplicitní soubory.
- Ve složce ProjectName_Package vytvořte adresář Log a použijte ho k zaznamenání informací o souborech, které sbalíte.
Pokud proces balení selhává nebo balíčky nasazení webu neobsahují soubory, které očekáváte, můžete tyto informace použít k řešení potíží s procesem a určení, kde dochází k chybě.
Poznámka
Vlastnost EnablePackageProcessLoggingAndAssert funguje pouze v případě, že sestavíte projekt pomocí konfigurace ladění. Vlastnost se v jiných konfiguracích ignoruje.
Toto téma je součástí řady kurzů založených na požadavcích na podnikové nasazení fiktivní společnosti s názvem Fabrikam, Inc. Tato série kurzů používá ukázkové řešení – řešení Contact Manager – k reprezentaci webové aplikace s realistickou úrovní složitosti, včetně aplikace ASP.NET MVC 3, služby Windows Communication Foundation (WCF) a databázového projektu.
Metoda nasazení, která je základem těchto kurzů, je založená na přístupu k rozděleným souborům projektu popsaném v tématu Principy souboru projektu, ve kterém je proces sestavení řízen dvěma soubory projektu – jeden obsahuje pokyny k sestavení, které platí pro každé cílové prostředí, a druhý obsahuje nastavení sestavení a nasazení specifické pro dané prostředí. V době sestavení se soubor projektu pro konkrétní prostředí sloučí do souboru projektu nezávislého na prostředí, aby se vytvořila úplná sada pokynů k sestavení.
Vysvětlení vlastnosti EnablePackageProcessLoggingAndAssert
Projekty vytváření a balení webových aplikací popisují, jak kanál publikování na webu (WPP) poskytuje sadu cílů nástroje MSBuild, které rozšiřují funkce nástroje MSBuild a umožňují jeho integraci s nástrojem pro nasazení webu Internetové informační služby (IIS). Když zabalíte projekt webové aplikace, vyvoláte cíle WPP.
Mnoho těchto cílů WPP zahrnuje podmíněnou logiku, která protokoluje další informace, když enablePackageProcessLoggingAndAssert vlastnost je nastavena na true. Pokud například zkontrolujete cíl balíčku , uvidíte, že vytvoří další adresář protokolu a zapíše seznam souborů do textového souboru, pokud enablePackageProcessLoggingAndAssert je rovno 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" />
Poznámka
Cíle WPP jsou definovány v souboru Microsoft.Web.Publishing.targets ve složce %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web. Tento soubor můžete otevřít a zkontrolovat cíle v sadě Visual Studio 2010 nebo v libovolném editoru XML. Dbejte na to, abyste obsah souboru neupravily.
Povolení dalšího protokolování
Můžete zadat hodnotu EnablePackageProcessLoggingAndAssert vlastnost různými způsoby, v závislosti na tom, jak vytváříte projekt.
Pokud projekt sestavíte z příkazového řádku, můžete zadat hodnotu vlastnosti EnablePackageProcessLoggingAndAssert jako argument příkazového řádku:
MSBuild.exe /t:Build
/p:Configuration=DEBUG
/p:DeployOnBuild=true
/p:DeployTarget=Package
/p:EnablePackageProcessLoggingAndAssert=true
[Your project].csproj
Pokud k sestavení projektů používáte vlastní soubor projektu, můžete do atributu Properties úlohy MSBuild zahrnout hodnotu EnablePackageProcessLoggingAndAssert:
<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
<MSBuild Projects="@(ProjectsToBuild)"
Properties="OutDir=$(OutputRoot);
Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
EnablePackageProcessLoggingAndAssert=true"
Targets="Build" />
</Target>
Pokud k sestavení projektů používáte definici sestavení Team Foundation Serveru (TFS), můžete zadat hodnotu pro vlastnost EnablePackageProcessLoggingAndAssert v řádku argumentů MSBuild :
Poznámka
Další informace o vytváření a konfiguraci definic sestavení najdete v tématu Vytvoření definice sestavení, která podporuje nasazení.
Případně, pokud chcete zahrnout balíček do každého sestavení, můžete upravit soubor projektu pro projekt webové aplikace nastavit EnablePackageProcessLoggingAndAssert vlastnost true. Vlastnost byste měli přidat do prvního elementu PropertyGroup v souboru .csproj nebo .vbproj.
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
<PropertyGroup>
<EnablePackageProcessLoggingAndAssert
Condition=" '$(EnablePackageProcessLoggingAndAssert)' == '' ">
true
</EnablePackageProcessLoggingAndAssert>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
Kontrola souborů protokolu
Když sestavíte a zabalíte projekt webové aplikace s enablePackageProcessLoggingAndAssert nastavenou na hodnotu true, nástroj MSBuild vytvoří další složku s názvem Log ve složce ProjectName_Package. Složka Log obsahuje různé soubory:
Seznam souborů, které uvidíte, se bude lišit podle toho, co je v projektu a v procesu sestavení. Tyto soubory se však obvykle používají k zaznamenání seznamu souborů, které WPP shromažďuje pro balení, v různých fázích procesu:
SouborPreExcludePipelineCollectFilesPhaseFileList.txt obsahuje seznam souborů, které nástroj MSBuild shromažďuje pro zabalení před odebráním všech souborů určených pro vyloučení.
SouborAfterExcludeFilesFilesList.txt obsahuje seznam upravených souborů po odebrání všech souborů určených pro vyloučení.
Poznámka
Další informace o vyloučení souborů a složek z procesu balení najdete v tématu Vyloučení souborů a složek z nasazení.
SouborAfterTransformWebConfig.txt obsahuje seznam souborů shromážděných pro zabalení po provedení všech Web.config transformací. V tomto seznamu jsou ze seznamu souborů pro balení vyloučeny všechny soubory transformace specifické pro konfiguraciWeb.config, například Web.Debug.config a Web.Release.config. Na jejich místě je zahrnuta jedna transformovaná Web.config .
SouborPostAutoParameterizationWebConfigConnectionStrings.txt obsahuje seznam souborů po parametrizaci připojovacích řetězců v souboruWeb.config. To je proces, který vám umožní nahradit připojovací řetězce správným nastavením pro vaše cílové prostředí při nasazování balíčku.
SouborPrepackage.txt obsahuje dokončený seznam souborů před sestavením, které mají být zahrnuty do balíčku.
Poznámka
Názvy dalších souborů protokolu obvykle odpovídají cílům WPP. Tyto cíle si můžete prohlédnout v souboru Microsoft.Web.Publishing.targets ve složce %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web.
Pokud obsah webového balíčku není očekávaný, může být kontrola těchto souborů užitečným způsobem, jak zjistit, v jakém okamžiku procesu došlo k chybě.
Závěr
Toto téma popisuje, jak můžete použít vlastnost EnablePackageProcessLoggingAndAssert v nástroji MSBuild k řešení potíží s procesem balení. Vysvětluje různé způsoby, jak můžete zadat hodnotu vlastnosti procesu sestavení, a popisuje další informace, které jsou zaznamenány, když nastavíte vlastnost na true.
Další čtení
Další informace o řízení procesu nasazení pomocí vlastních souborů projektu MSBuild najdete v tématech Principy souboru projektu a Principy procesu sestavení. Další informace o WPP a o tom, jak spravuje proces balení, najdete v tématu Vytváření a balení projektů webových aplikací. Pokyny k vyloučení konkrétních souborů a složek z balíčků nasazení webu najdete v tématu Vyloučení souborů a složek z nasazení.