Udostępnij za pośrednictwem


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 : jeśli używasz definicji kompilacji serwera Team Foundation Server (T F S) do kompilowania projektów, możesz podać wartość właściwości EnablePackageProcessLoggingAndAssert w argumentach 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:

Program MSBuild tworzy dodatkowy folder o nazwie Log w folderze ProjectName_Package.

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.