Freigeben über


Behandeln von Problemen mit dem Paketerstellungsprozess

von Jason Lee

In diesem Thema wird beschrieben, wie Sie detaillierte Informationen zum Paketerstellungsprozess mithilfe der EnablePackageProcessLoggingAndAssert-Eigenschaft im Microsoft-Build-Engine (MSBuild) sammeln können.

Wenn Sie die EnablePackageProcessLoggingAndAssert-Eigenschaft auf true festlegen, führt MSBuild Folgendes aus:

  • Fügen Sie den Buildprotokollen zusätzliche Informationen zum Paketerstellungsprozess hinzu.
  • Protokollieren Sie Fehler unter bestimmten Bedingungen, z. B. wenn doppelte Dateien in der Paketliste gefunden werden.
  • Erstellen Sie ein Protokollverzeichnis im Ordner ProjectName_Package und verwenden Sie es, um Informationen zu den Dateien aufzuzeichnen, die Sie packen.

Wenn der Paketerstellungsprozess fehlschlägt oder Ihre Webbereitstellungspakete nicht die erwarteten Dateien enthalten, können Sie diese Informationen verwenden, um die Problembehandlung des Prozesses zu beheben und zu ermitteln, wo probleme auftreten.

Hinweis

Die EnablePackageProcessLoggingAndAssert-Eigenschaft funktioniert nur, wenn Sie Ihr Projekt mithilfe der Debugkonfiguration erstellen. Die -Eigenschaft wird in anderen Konfigurationen ignoriert.

Dieses Thema ist Teil einer Reihe von Tutorials, die sich auf die Unternehmensbereitstellungsanforderungen eines fiktiven Unternehmens namens Fabrikam, Inc. beziehen. In dieser Tutorialreihe wird eine Beispiellösung – die Contact Manager-Lösung – verwendet, um eine Webanwendung mit einem realistischen Komplexitätsgrad darzustellen, einschließlich einer ASP.NET MVC 3-Anwendung, eines WCF-Diensts (Windows Communication Foundation) und eines Datenbankprojekts.

Die Bereitstellungsmethode im Mittelpunkt dieser Tutorials basiert auf dem unter Grundlegendes zur Projektdatei beschriebenen Ansatz für geteilte Projektdateien, bei dem der Buildprozess von zwei Projektdateien gesteuert wird– eine mit Buildanweisungen, die für jede Zielumgebung gelten, und eine mit umgebungsspezifischen Build- und Bereitstellungseinstellungen. Zur Buildzeit wird die umgebungsspezifische Projektdatei in die umgebungsunabhängige Projektdatei zusammengeführt, um einen vollständigen Satz von Buildanweisungen zu bilden.

Grundlegendes zur EnablePackageProcessLoggingAndAssert-Eigenschaft

Beim Erstellen und Verpacken von Webanwendungsprojekten wurde beschrieben, wie die Web publishing Pipeline (WPP) eine Reihe von MSBuild-Zielen bereitstellt, die die Funktionalität von MSBuild erweitern und die Integration in das Webbereitstellungstool für Internetinformationsdienste (IIS) (Web Deploy) ermöglichen. Wenn Sie ein Webanwendungsprojekt packen, werden WPP-Ziele aufgerufen.

Viele dieser WPP-Ziele enthalten bedingte Logik, die zusätzliche Informationen protokolliert, wenn die EnablePackageProcessLoggingAndAssert-Eigenschaft auf true festgelegt ist. Wenn Sie beispielsweise das Paketziel überprüfen, sehen Sie, dass ein zusätzliches Protokollverzeichnis erstellt und eine Liste von Dateien in eine Textdatei schreibt, wenn EnablePackageProcessLoggingAndAssert gleich true ist.

<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" />

Hinweis

Die WPP-Ziele werden in der Datei Microsoft.Web.Publishing.targets im Ordner %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web definiert. Sie können diese Datei öffnen und die Ziele in Visual Studio 2010 oder einem beliebigen XML-Editor überprüfen. Achten Sie darauf, den Inhalt der Datei nicht zu ändern.

Aktivieren der zusätzlichen Protokollierung

Je nachdem, wie Sie Ihr Projekt erstellen, können Sie einen Wert für die EnablePackageProcessLoggingAndAssert-Eigenschaft auf verschiedene Weise angeben.

Wenn Sie Ihr Projekt über die Befehlszeile erstellen, können Sie einen Wert für die EnablePackageProcessLoggingAndAssert-Eigenschaft als Befehlszeilenargument angeben:

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

Wenn Sie eine benutzerdefinierte Projektdatei zum Erstellen Ihrer Projekte verwenden, können Sie den Wert EnablePackageProcessLoggingAndAssert in das Properties-Attribut der MSBuild-Aufgabe einschließen:

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

Wenn Sie eine TfS-Builddefinition (Team Foundation Server) zum Erstellen Ihrer Projekte verwenden, können Sie einen Wert für die EnablePackageProcessLoggingAndAssert-Eigenschaft in der Zeile MSBuild Arguments angeben: Wenn Sie eine Team Foundation Server-Builddefinition (T F S) zum Erstellen Ihrer Projekte verwenden, können Sie einen Wert für die EnablePackageProcessLoggingAndAssert-Eigenschaft in den MSBuild-Argumenten angeben.

Hinweis

Weitere Informationen zum Erstellen und Konfigurieren von Builddefinitionen finden Sie unter Erstellen einer Builddefinition, die die Bereitstellung unterstützt.

Wenn Sie das Paket in jeden Build einschließen möchten, können Sie alternativ die Projektdatei für Ihr Webanwendungsprojekt ändern, um die EnablePackageProcessLoggingAndAssert-Eigenschaft auf true festzulegen. Sie sollten die -Eigenschaft dem ersten PropertyGroup-Element in Ihrer CSPROJ- oder VBPROJ-Datei hinzufügen.

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

Überprüfen der Protokolldateien

Wenn Sie ein Webanwendungsprojekt erstellen und packen, bei dem EnablePackageProcessLoggingAndAssert auf true festgelegt ist, erstellt MSBuild im Ordner ProjectName_Package einen zusätzlichen Ordner namens Log. Der Ordner Protokoll enthält verschiedene Dateien:

MSBuild erstellt einen zusätzlichen Ordner namens Log im Ordner ProjectName_Package.

Die Liste der angezeigten Dateien variiert je nach Den Elementen in Ihrem Projekt und Ihrem Buildprozess. Diese Dateien werden jedoch in der Regel verwendet, um die Liste der Dateien aufzuzeichnen, die das WPP für die Paketerstellung in verschiedenen Phasen des Prozesses sammelt:

  • Die PreExcludePipelineCollectFilesPhaseFileList.txt-Datei listet die Dateien auf, die MSBuild für die Paketerstellung sammelt, bevor dateien entfernt werden, die für den Ausschluss angegeben wurden.

  • Die AfterExcludeFilesFilesList.txt Datei enthält die Liste der geänderten Dateien, nachdem alle Dateien entfernt wurden, die für den Ausschluss angegeben wurden.

    Hinweis

    Weitere Informationen zum Ausschließen von Dateien und Ordnern vom Paketerstellungsprozess finden Sie unter Ausschließen von Dateien und Ordnern aus der Bereitstellung.

  • Die AfterTransformWebConfig.txt-Datei listet die Dateien auf, die für die Paketerstellung gesammelt wurden, nachdem Web.config Transformationen ausgeführt wurden. In dieser Liste werden alle konfigurationsspezifischen Web.config Transformierungsdateien wie Web.Debug.config und Web.Release.configvon der Liste der Dateien für die Paketerstellung ausgeschlossen. An ihrer Stelle ist eine einzelne transformierte Web.config enthalten.

  • Die PostAutoParameterizationWebConfigConnectionStrings.txt Datei enthält die Liste der Dateien, nachdem die Verbindungszeichenfolgen in der Web.config Datei parametrisiert wurden. Dies ist der Prozess, mit dem Sie Ihre Verbindungszeichenfolgen durch die richtigen Einstellungen für Ihre Zielumgebung ersetzen können, wenn Sie das Paket bereitstellen.

  • Die Prepackage.txt-Datei enthält die fertige Vorabbuildliste der Dateien, die in das Paket aufgenommen werden sollen.

Hinweis

Die Namen der zusätzlichen Protokolldateien entsprechen in der Regel WPP-Zielen. Sie können diese Ziele überprüfen, indem Sie die Datei Microsoft.Web.Publishing.targets im Ordner %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web untersuchen.

Wenn der Inhalt Ihres Webpakets nicht ihren Erwartungen entspricht, kann die Überprüfung dieser Dateien eine nützliche Möglichkeit sein, um zu ermitteln, an welcher Stelle im Prozess fehler aufgetreten ist.

Zusammenfassung

In diesem Thema wurde beschrieben, wie Sie die EnablePackageProcessLoggingAndAssert-Eigenschaft in MSBuild verwenden können, um Probleme beim Paketerstellungsprozess zu beheben. Es wurden die verschiedenen Möglichkeiten erläutert, wie Sie den Eigenschaftswert für den Buildprozess bereitstellen können, und es wurden die zusätzlichen Informationen beschrieben, die aufgezeichnet werden, wenn Sie die Eigenschaft auf true festlegen.

Weitere Informationen

Weitere Informationen zur Verwendung benutzerdefinierter MSBuild-Projektdateien zum Steuern des Bereitstellungsprozesses finden Sie unter Grundlegendes zur Projektdatei und Grundlegendes zum Buildprozess. Weitere Informationen zum WPP und zur Verwaltung des Paketerstellungsprozesses finden Sie unter Erstellen und Verpacken von Webanwendungsprojekten. Eine Anleitung zum Ausschließen bestimmter Dateien und Ordner aus Webbereitstellungspaketen finden Sie unter Ausschließen von Dateien und Ordnern aus der Bereitstellung.