Risoluzione dei problemi del processo di creazione di pacchetti

di Jason Lee

Questo argomento descrive come raccogliere informazioni dettagliate sul processo di creazione pacchetti usando la proprietà EnablePackageProcessLoggingAndAssert nella Microsoft Build Engine (MSBuild).

Quando si imposta la proprietà EnablePackageProcessLoggingAndAssert su true, MSBuild:

  • Aggiungere altre informazioni sul processo di creazione dei pacchetti ai log di compilazione.
  • Errori di log in determinate condizioni, ad esempio, se i file duplicati vengono trovati nell'elenco di pacchetti.
  • Creare una directory log nella cartella ProjectName_Package e usarla per registrare le informazioni sui file che si stanno creando.

Se il processo di creazione del pacchetto ha esito negativo o i pacchetti di distribuzione Web non contengono i file previsti, è possibile usare queste informazioni per risolvere i problemi del processo e individuare dove si verificano errori.

Nota

La proprietà EnablePackageProcessLoggingAndAssert funziona solo se si compila il progetto usando la configurazione Debug . La proprietà viene ignorata in altre configurazioni.

Questo argomento fa parte di una serie di esercitazioni basate sui requisiti di distribuzione aziendali di una società fittizia denominata Fabrikam, Inc. Questa serie di esercitazioni usa una soluzione di esempio, la soluzione Contact Manager, per rappresentare un'applicazione Web con un livello realistico di complessità, tra cui un'applicazione MVC 3 ASP.NET, un servizio Windows Communication Foundation (WCF) e un progetto di database.

Il metodo di distribuzione al centro di queste esercitazioni si basa sull'approccio di suddivisione del file di progetto descritto in Informazioni sul file di progetto, in cui il processo di compilazione è controllato da due file di progetto, uno contenente istruzioni di compilazione che si applicano a ogni ambiente di destinazione e uno contenente le impostazioni di compilazione e distribuzione specifiche dell'ambiente. In fase di compilazione, il file di progetto specifico dell'ambiente viene unito al file di progetto agnostico dell'ambiente per formare un set completo di istruzioni di compilazione.

Informazioni sulla proprietà EnablePackageProcessLoggingAndAssert

Creazione e creazione di pacchetti di progetti applicazione Web descrive come la pipeline di pubblicazione Web (WPP) fornisce un set di destinazioni MSBuild che estendono la funzionalità di MSBuild e consentono di integrarla con lo strumento di distribuzione Web IIS (Internet Information Services) (Distribuzione Web). Quando si crea un pacchetto di un progetto di applicazione Web, si richiamano destinazioni WPP.

Molte di queste destinazioni WPP includono la logica condizionale che registra informazioni aggiuntive quando la proprietà EnablePackageProcessLoggingAndAssert è impostata su true. Ad esempio, se si esamina la destinazione pacchetto , è possibile notare che crea una directory di log aggiuntiva e scrive un elenco di file in un file di testo se EnablePackageProcessLoggingAndAssert è uguale a 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" />

Nota

Le destinazioni WPP sono definite nel file Microsoft.Web.Publishing.targets nella cartella %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web. È possibile aprire questo file e esaminare le destinazioni in Visual Studio 2010 o in qualsiasi editor XML. Prestare attenzione a non modificare il contenuto del file.

Abilitazione della registrazione aggiuntiva

È possibile specificare un valore per la proprietà EnablePackageProcessLoggingAndAssert in vari modi, a seconda della compilazione del progetto.

Se si compila il progetto dalla riga di comando, è possibile specificare un valore per la proprietà EnablePackageProcessLoggingAndAssert come argomento della riga di comando:

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

Se si usa un file di progetto personalizzato per compilare i progetti, è possibile includere il valore EnablePackageProcessLoggingAndAssert nell'attributo Proprietà dell'attività MSBuild :

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

Se si usa una definizione di compilazione di Team Foundation Server (TFS) per compilare i progetti, è possibile fornire un valore per la proprietà EnablePackageProcessLoggingAndAssert nella riga ARGOMENTI DI MSBuild:Se si usa una definizione di compilazione team Foundation Server (T F) per compilare i progetti, è possibile fornire un valore per la proprietà EnablePackageProcessLoggingAndAssert negli argomenti di MSBuild.

Nota

Per altre informazioni sulla creazione e la configurazione delle definizioni di compilazione, vedere Creazione di una definizione di compilazione che supporta la distribuzione.

In alternativa, se si vuole includere il pacchetto in ogni compilazione, è possibile modificare il file di progetto per il progetto applicazione Web per impostare la proprietà EnablePackageProcessLoggingAndAssert su true. È necessario aggiungere la proprietà al primo elemento PropertyGroup all'interno del file con estensione csproj o vbproj.

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

Revisione dei file di log

Quando si compila e si crea un pacchetto di un progetto applicazione Web con EnablePackageProcessLoggingAndAssert impostato su true, MSBuild crea una cartella aggiuntiva denominata Log nella cartella ProjectName_Package. La cartella Log contiene vari file:

MSBuild crea una cartella aggiuntiva denominata Log nella cartella ProjectName_Package.

L'elenco dei file visualizzati varia in base agli elementi del progetto e al processo di compilazione. Tuttavia, questi file vengono in genere usati per registrare l'elenco di file raccolti dal WPP per la creazione di pacchetti, in varie fasi del processo:

  • Il file PreExcludePipelineCollectFilesPhaseFileList.txt elenca i file raccolti da MSBuild per la creazione di pacchetti prima che vengano rimossi i file specificati per l'esclusione.

  • Il file AfterExcludeFilesFilesList.txt contiene l'elenco di file modificato dopo la rimozione di eventuali file specificati per l'esclusione.

    Nota

    Per altre informazioni sull'esclusione di file e cartelle dal processo di creazione pacchetti, vedere Esclusione di file e cartelle dalla distribuzione.

  • Il file AfterTransformWebConfig.txt elenca i file raccolti per la creazione di pacchetti dopo l'esecuzione di eventuali trasformazioni Web.config . In questo elenco, tutti i file Web.config di trasformazione specifici della configurazione, ad esempio Web.Debug.config e Web.Release.config, vengono esclusi dall'elenco di file per la creazione di pacchetti. Una singola Web.config trasformata è inclusa nel loro posto.

  • Il file PostAutoParameterizationWebConfigConnectionStrings.txt contiene l'elenco di file dopo che le stringhe di connessione nel file Web.config sono state parametrizzate. Questo è il processo che consente di sostituire le stringhe di connessione con le impostazioni corrette per l'ambiente di destinazione quando si distribuisce il pacchetto.

  • Il file Prepackage.txt contiene l'elenco di file di pre-compilazione finali da includere nel pacchetto.

Nota

I nomi dei file di log aggiuntivi corrispondono in genere alle destinazioni WPP. È possibile esaminare queste destinazioni esaminando il file Microsoft.Web.Publishing.targets nella cartella %PROGRAMFILES(x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Web.

Se il contenuto del pacchetto Web non è quello previsto, la revisione di questi file può essere un modo utile per identificare a quale punto del processo le cose sono andate male.

Conclusione

Questo argomento descrive come usare la proprietà EnablePackageProcessLoggingAndAssert in MSBuild per risolvere i problemi del processo di creazione dei pacchetti. Spiega i diversi modi in cui è possibile fornire il valore della proprietà al processo di compilazione e descrive le informazioni aggiuntive registrate quando si imposta la proprietà su true.

Altre informazioni

Per altre informazioni sull'uso di file di progetto MSBuild personalizzati per controllare il processo di distribuzione, vedere Informazioni sul file di progetto e informazioni sul processo di compilazione. Per altre informazioni sul WPP e sul modo in cui gestisce il processo di creazione di pacchetti, vedere Compilazione e creazione di progetti applicazione Web per la creazione di pacchetti. Per indicazioni su come escludere file e cartelle specifici dai pacchetti di distribuzione Web, vedere Esclusione di file e cartelle dalla distribuzione.