Freigeben über


Problembehandlung beim Verpackungsvorgang

von Jason Lee

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

Wenn Sie die Eigenschaft "EnablePackageProcessLoggingAndAssert" auf "true" festlegen, führt MSBuild folgende Aktionen aus:

  • Fügen Sie den Buildprotokollen zusätzliche Informationen zum Verpackungsprozess 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 verpacken.

Wenn der Verpackungsvorgang fehlschlägt oder Ihre Webbereitstellungspakete nicht die erwarteten Dateien enthalten, können Sie diese Informationen verwenden, um probleme mit dem Prozess zu beheben und zu ermitteln, wo die Dinge schief gehen.

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 Lernprogrammen basierend auf den Anforderungen an die Unternehmensbereitstellung eines fiktiven Unternehmens namens Fabrikam, Inc. In dieser Lernprogrammreihe wird eine Beispiellösung – die Contact Manager-Lösung – verwendet, um eine Webanwendung mit einer realistischen Komplexitätsstufe darzustellen, einschließlich einer ASP.NET MVC 3-Anwendung, einem WCF-Dienst (Windows Communication Foundation) und einem Datenbankprojekt.

Die Bereitstellungsmethode im Mittelpunkt dieser Lernprogramme basiert auf dem geteilten Projektdateiansatz, der unter "Grundlegendes zur Projektdatei" beschrieben wird, in 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 Build-Zeit wird die umgebungsspezifische Projektdatei in die umgebungsunabhängige Projektdatei zusammengeführt, um einen vollständigen Satz von Build-Anweisungen zu bilden.

Grundlegendes zur EnablePackageProcessLoggingAndAssert-Eigenschaft

Beim Erstellen und Verpacken von Webanwendungsprojekten wird 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 Iis-Webbereitstellungstool (Web Deploy) ermöglichen. Wenn Sie ein Webanwendungsprojekt packen, werden WPP-Ziele abgerufen.

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, können Sie sehen, dass es 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

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

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 verwenden, um Ihre Projekte zu erstellen, können Sie den EnablePackageProcessLoggingAndAssert-Wert 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-Argumente " angeben:Wenn Sie eine Team Foundation Server (T F S)-Builddefinition 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 auch in jeden Build einschließen möchten, können Sie die Projektdatei für Ihr Webanwendungsprojekt ändern, um die Eigenschaft EnablePackageProcessLoggingAndAssert auf "true" festzulegen. Sie sollten die Eigenschaft dem ersten PropertyGroup-Element in der 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 verpacken, bei dem EnablePackageProcessLoggingAndAssert auf "true" festgelegt ist, erstellt MSBuild einen zusätzlichen Ordner namens "Log" im Ordner "ProjectName_Package". Der Ordner "Protokoll" enthält verschiedene Dateien:

MSBuild erstellt einen zusätzlichen Ordner namens

Die Liste der angezeigten Dateien variiert je nach den Dingen 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 das Verpacken sammelt, in verschiedenen Phasen des Prozesses:

  • Die PreExcludePipelineCollectFilesPhaseFileList.txt Datei listet die Dateien auf, die MSBuild für das Verpacken sammelt, bevor dateien, die für den Ausschluss angegeben sind, entfernt werden.

  • Die AfterExcludeFilesFilesList.txt Datei enthält die geänderte Dateiliste, nachdem alle dateien, die für den Ausschluss angegeben sind, entfernt werden.

    Hinweis

    Weitere Informationen zum Ausschließen von Dateien und Ordnern aus dem Paketprozess finden Sie unter "Ausschließen von Dateien und Ordnern aus der Bereitstellung".

  • Die AfterTransformWebConfig.txt Datei listet die Dateien auf, die für das Verpacken gesammelt werden, nachdem alle Web.config Transformationen ausgeführt wurden. In dieser Liste werden alle konfigurationsspezifischen Web.config Transformationsdateien wie Web.Debug.config und Web.Release.configaus der Liste der Dateien für das Verpacken ausgeschlossen. Eine einzelne transformierte Web.config ist an deren Stelle aufgenommen.

  • 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 normalerweise WPP-Zielen. Sie können diese Ziele überprüfen, indem Sie die Datei "Microsoft.Web.Publishing.targets " im %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Webordner untersuchen.

Wenn der Inhalt Ihres Webpakets nicht ihren Erwartungen entspricht, kann es sich bei der Überprüfung dieser Dateien um eine nützliche Methode handeln, um zu ermitteln, an welchem Punkt im Prozess die Dinge schief gegangen sind.

Fazit

In diesem Thema wird beschrieben, wie Sie die EnablePackageProcessLoggingAndAssert-Eigenschaft in MSBuild verwenden können, um probleme mit dem Verpackungsvorgang zu beheben. Es erläuterte die verschiedenen Möglichkeiten, 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.

Weiterführende Lektüre

Weitere Informationen zur Verwendung von benutzerdefinierten MSBuild-Projektdateien zur Steuerung des Bereitstellungsprozesses finden Sie unter Grundlegendes zur Projektdatei und zum Verständnis des Buildprozesses. Weitere Informationen zum WPP und zur Verwaltung des Paketprozesses finden Sie unter Building and Packaging Web Application Projects. Anleitungen zum Ausschließen bestimmter Dateien und Ordner aus Webbereitstellungspaketen finden Sie unter "Ausschließen von Dateien und Ordnern aus der Bereitstellung".