Rozwiązywanie problemów z procesem tworzenia pakietów
Autor : Jason Lee
W tym temacie opisano sposób zbierania szczegółowych informacji o procesie pakowania przy użyciu właściwości EnablePackageProcessLoggingAndAssert w Microsoft Build Engine (MSBuild).
Po ustawieniu właściwości EnablePackageProcessLoggingAndAssert na wartość true program MSBuild będzie:
- Dodaj dodatkowe informacje o procesie pakowania do dzienników kompilacji.
- Rejestruj błędy w określonych warunkach, na przykład jeśli na liście pakietów zostaną znalezione zduplikowane pliki.
- Utwórz katalog dziennika w folderze ProjectName_Package i użyj go do rejestrowania informacji o plikach, które tworzysz.
Jeśli proces pakowania kończy się niepowodzeniem lub pakiety wdrożeniowe w Internecie nie zawierają oczekiwanych plików, możesz użyć tych informacji do rozwiązywania problemów z procesem i wskazać, gdzie coś się dzieje.
Uwaga
Właściwość EnablePackageProcessLoggingAndAssert działa tylko w przypadku kompilowania projektu przy użyciu konfiguracji debugowania . Właściwość jest ignorowana w innych konfiguracjach.
Ten temat stanowi część serii samouczków opartych na wymaganiach dotyczących wdrażania w przedsiębiorstwie fikcyjnej firmy o nazwie Fabrikam, Inc. W tej serii samouczków użyto przykładowego rozwiązania — rozwiązania Contact Manager — do reprezentowania aplikacji internetowej o realistycznym poziomie złożoności, w tym aplikacji ASP.NET MVC 3, usługi Windows Communication Foundation (WCF) i projektu bazy danych.
Metoda wdrażania w centrum tych samouczków jest oparta na metodzie podzielonego pliku projektu opisanego w opisie pliku projektu, w którym proces kompilacji jest kontrolowany przez dwa pliki projektu — jeden zawierający instrukcje kompilacji dotyczące każdego środowiska docelowego i jeden zawierający ustawienia kompilacji i wdrażania specyficzne dla środowiska. W czasie kompilacji plik projektu specyficzny dla środowiska jest scalony z plikiem projektu niezależnego od środowiska w celu utworzenia pełnego zestawu instrukcji kompilacji.
Opis właściwości EnablePackageProcessLoggingAndAssert
Kompilowanie i pakowanie projektów aplikacji internetowych opisano, w jaki sposób potok publikowania sieci Web (WPP) udostępnia zestaw obiektów docelowych programu MSBuild, które rozszerzają funkcjonalność programu MSBuild i umożliwiają integrację z narzędziem wdrażania w Sieci Web usług Internet Information Services (IIS) (Web Deploy). Podczas tworzenia pakietu projektu aplikacji internetowej wywoływanie obiektów docelowych WPP.
Wiele z tych obiektów docelowych programu WPP obejmuje logikę warunkową, która rejestruje dodatkowe informacje, gdy właściwość EnablePackageProcessLoggingAndAssert ma wartość true. Jeśli na przykład przeglądasz element docelowy pakietu , zobaczysz, że tworzy on dodatkowy katalog dziennika i zapisuje listę plików w pliku tekstowym, jeśli parametr EnablePackageProcessLoggingAndAssert jest równy 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" />
Uwaga
Obiekty docelowe programu WPP są zdefiniowane w pliku Microsoft.Web.Publishing.targets w folderze %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web. Możesz otworzyć ten plik i przejrzeć elementy docelowe w programie Visual Studio 2010 lub dowolnym edytorze XML. Nie należy modyfikować zawartości pliku.
Włączanie dodatkowego rejestrowania
Możesz podać wartość właściwości EnablePackageProcessLoggingAndAssert na różne sposoby, w zależności od sposobu kompilowania projektu.
Jeśli kompilujesz projekt z poziomu wiersza polecenia, możesz podać wartość właściwości EnablePackageProcessLoggingAndAssert jako argument wiersza polecenia:
MSBuild.exe /t:Build
/p:Configuration=DEBUG
/p:DeployOnBuild=true
/p:DeployTarget=Package
/p:EnablePackageProcessLoggingAndAssert=true
[Your project].csproj
Jeśli używasz niestandardowego pliku projektu do kompilowania projektów, możesz uwzględnić wartość EnablePackageProcessLoggingAndAssert w atrybucie Properties zadania MSBuild :
<Target Name="BuildProjects" Condition=" '$(BuildingInTeamBuild)'!='true' ">
<MSBuild Projects="@(ProjectsToBuild)"
Properties="OutDir=$(OutputRoot);
Configuration=$(Configuration);
DeployOnBuild=true;
DeployTarget=Package;
EnablePackageProcessLoggingAndAssert=true"
Targets="Build" />
</Target>
Jeśli używasz definicji kompilacji serwera Team Foundation Server (TFS) do kompilowania projektów, możesz podać wartość właściwości EnablePackageProcessLoggingAndAssert w wierszu Argumenty msBuild :
Uwaga
Aby uzyskać więcej informacji na temat tworzenia i konfigurowania definicji kompilacji, zobacz Tworzenie definicji kompilacji obsługującej wdrożenie.
Alternatywnie, jeśli chcesz uwzględnić pakiet w każdej kompilacji, możesz zmodyfikować plik projektu dla projektu aplikacji internetowej, aby ustawić właściwość EnablePackageProcessLoggingAndAssert na true. Właściwość należy dodać do pierwszego elementu PropertyGroup w pliku csproj lub vbproj.
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="...">
<PropertyGroup>
<EnablePackageProcessLoggingAndAssert
Condition=" '$(EnablePackageProcessLoggingAndAssert)' == '' ">
true
</EnablePackageProcessLoggingAndAssert>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
Przeglądanie plików dziennika
Podczas kompilowania i tworzenia pakietu projektu aplikacji internetowej z ustawieniem EnablePackageProcessLoggingAndAssert ustawiono wartość true, program MSBuild tworzy dodatkowy folder o nazwie Log w folderze ProjectName_Package. Folder Dziennika zawiera różne pliki:
Lista wyświetlanych plików będzie się różnić w zależności od elementów w projekcie i procesie kompilacji. Jednak te pliki są zwykle używane do rejestrowania listy plików zbieranych przez program WPP na potrzeby pakowania na różnych etapach procesu:
Plik PreExcludePipelineCollectFilesPhaseFileList.txt zawiera listę plików zbieranych przez program MSBuild do tworzenia pakietów przed usunięciem plików określonych do wykluczenia.
Plik AfterExcludeFilesFilesList.txt zawiera zmodyfikowaną listę plików po usunięciu wszystkich plików określonych do wykluczenia.
Uwaga
Aby uzyskać więcej informacji na temat wykluczania plików i folderów z procesu pakowania, zobacz Wykluczanie plików i folderów z wdrożenia.
Plik AfterTransformWebConfig.txt zawiera listę plików zebranych do pakowania po wykonaniu wszystkich Web.config przekształceń. Na tej liście wszystkie pliki przekształcania specyficzne dla konfiguracji Web.config , takie jak Web.Debug.config i Web.Release.config, są wykluczone z listy plików do pakowania. W ich miejscu znajduje się jeden przekształcony Web.config .
Plik PostAutoParameterizationWebConfigConnectionStrings.txt zawiera listę plików po sparametryzowanym parametrach połączenia w pliku Web.config . Jest to proces, który umożliwia zastąpienie parametrów połączenia odpowiednimi ustawieniami środowiska docelowego podczas wdrażania pakietu.
Plik Prepackage.txt zawiera sfinalizowaną listę wstępnie skompilowanych plików, które mają zostać uwzględnione w pakiecie.
Uwaga
Nazwy dodatkowych plików dziennika zwykle odpowiadają obiektom docelowym programu WPP. Te elementy docelowe można przejrzeć, sprawdzając plik Microsoft.Web.Publishing.targets w folderze %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web.
Jeśli zawartość pakietu internetowego nie jest zgodna z oczekiwaniami, przejrzenie tych plików może być przydatnym sposobem identyfikowania, w jakim momencie procesu wystąpiły problemy.
Podsumowanie
W tym temacie opisano sposób używania właściwości EnablePackageProcessLoggingAndAssert w programie MSBuild w celu rozwiązywania problemów z procesem tworzenia pakietów. Wyjaśniono w nim różne sposoby podawania wartości właściwości do procesu kompilacji i opisano dodatkowe informacje rejestrowane podczas ustawiania właściwości na true.
Dalsze informacje
Aby uzyskać więcej informacji na temat używania niestandardowych plików projektu MSBuild do sterowania procesem wdrażania, zobacz Opis pliku projektu i Opis procesu kompilacji. Aby uzyskać więcej informacji na temat programu WPP i sposobu zarządzania procesem tworzenia pakietów, zobacz Building and Packaging Web Application Projects (Tworzenie i pakowanie projektów aplikacji internetowych). Aby uzyskać wskazówki dotyczące wykluczania określonych plików i folderów z pakietów wdrażania sieci Web, zobacz Wykluczanie plików i folderów z wdrożenia.