Esclusione di file e cartelle dalla distribuzione

di Jason Lee

Questo argomento descrive come escludere file e cartelle da un pacchetto di distribuzione Web durante la compilazione e il pacchetto di un progetto di applicazione Web.

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.

Panoramica

Quando si compila un progetto applicazione Web in Visual Studio 2010, la pipeline di pubblicazione Web (WPP) consente di estendere questo processo di compilazione tramite la creazione del pacchetto dell'applicazione Web compilata in un pacchetto Web distribuito. È quindi possibile usare lo strumento di distribuzione Web Internet Information Services (IIS) (Distribuzione Web) per distribuire questo pacchetto Web in un server Web IIS remoto o importare manualmente il pacchetto Web tramite Gestione IIS. Questo processo di creazione e creazione di pacchetti è illustrato in Creazione e creazione di progetti applicazione Web.

Come si controllano gli elementi inclusi nel pacchetto Web? Le impostazioni del progetto in Visual Studio, tramite il file di progetto sottostante, forniscono un controllo sufficiente per molti scenari. Tuttavia, in alcuni casi è possibile personalizzare il contenuto del pacchetto Web in ambienti di destinazione specifici. Ad esempio, è possibile includere una cartella per i file di log quando si distribuisce l'applicazione in un ambiente di test, ma escludere la cartella quando si distribuisce l'applicazione in un ambiente di gestione temporanea o di produzione. Questo argomento illustra come eseguire questa operazione.

Cosa ottiene incluso per impostazione predefinita?

Quando si configurano le proprietà del progetto applicazione Web in Visual Studio, gli elementi da distribuire nella pagina Web Package/Publish consentono di specificare cosa includere nel pacchetto di distribuzione Web. Per impostazione predefinita, questa opzione è impostata su Solo i file necessari per eseguire questa applicazione.

Per impostazione predefinita, questa opzione è impostata su Solo i file necessari per eseguire questa applicazione.

Quando si sceglie Solo file necessari per eseguire questa applicazione, il WPP tenterà di determinare quali file devono essere aggiunti al pacchetto Web. ad esempio:

  • Tutti gli output di compilazione per il progetto.
  • Tutti i file contrassegnati con un'azione di compilazione del contenuto.

Nota

Logica che determina quali file includere è contenuto in questo file:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets

Esclusione di file e cartelle specifiche

In alcuni casi, si vuole un controllo più granulare su quali file e cartelle vengono distribuiti. Se si conoscono i file da escludere in anticipo e l'esclusione si applica a tutti gli ambienti di destinazione, è sufficiente impostare l'azione di compilazione di ogni file su Nessuno.

Per escludere file specifici dalla distribuzione

  1. Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sul file e quindi scegliere Proprietà.
  2. Nella finestra Proprietàselezionare Nessuna nella riga Azione di compilazione.

Tuttavia, questo approccio non è sempre pratico. Ad esempio, è possibile variare i file e le cartelle inclusi in base all'ambiente di destinazione e dall'esterno di Visual Studio. Ad esempio, nella soluzione di esempio Contact Manager esaminare il contenuto del progetto ContactManager.Mvc:

Contenuto del progetto ContactManager.Mvc.

  • La cartella Interna contiene alcuni script SQL usati dallo sviluppatore per creare, eliminare e popolare i database locali a scopo di sviluppo. Non è necessario distribuire nulla in questa cartella in un ambiente di gestione temporanea o di produzione.
  • La cartella Script contiene diversi file JavaScript. Molti di questi file sono inclusi esclusivamente per supportare il debug o fornire IntelliSense in Visual Studio. Alcuni di questi file non devono essere distribuiti in ambienti di gestione temporanea o di produzione. Tuttavia, è possibile distribuirli in un ambiente di test per sviluppatori per facilitare la risoluzione dei problemi.

Anche se è possibile modificare i file di progetto per escludere file e cartelle specifici, esiste un modo più semplice. Il WPP include un meccanismo per escludere file e cartelle creando elenchi di elementi denominati ExcludeFromPackageFolders e ExcludeFromPackageFiles. È possibile estendere questo meccanismo aggiungendo elementi personalizzati a questi elenchi. A tale scopo, è necessario completare questi passaggi di alto livello:

  1. Creare un file di progetto personalizzato denominato [nome progetto].wpp.targets nella stessa cartella del file di progetto.

    Nota

    Il file con estensione wpp.targets deve entrare nella stessa cartella del file di progetto dell'applicazione Web, ad esempio ContactManager.Mvc.csproj, anziché nella stessa cartella di tutti i file di progetto personalizzati usati per controllare il processo di compilazione e distribuzione.

  2. Nel file .wpp.targets aggiungere un elemento ItemGroup .

  3. Nell'elemento ItemGroup aggiungere elementi ExcludeFromPackageFolders e ExcludeFromPackageFiles per escludere file e cartelle specifici in base alle esigenze.

Si tratta della struttura di base di questo file con estensione wpp.targets :

<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>   
    <ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFolders>
    <ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
      <FromTarget>[arbitrary metadata value]</FromTarget>
    </ExcludeFromPackageFiles>
  </ItemGroup>
</Project>

Si noti che ogni elemento include un elemento di metadati denominato FromTarget. Si tratta di un valore facoltativo che non influisce sul processo di compilazione; serve semplicemente per indicare il motivo per cui sono stati omessi file o cartelle particolari se qualcuno esamina i log di compilazione.

Esclusione di file e cartelle da un pacchetto Web

La procedura successiva illustra come aggiungere un file con estensione wpp.targets a un progetto applicazione Web e come usare il file per escludere file e cartelle specifici dal pacchetto Web quando si compila il progetto.

Per escludere file e cartelle da un pacchetto di distribuzione Web

  1. Aprire la soluzione in Visual Studio 2010.

  2. Nella finestra Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del progetto applicazione Web, ad esempio ContactManager.Mvc, scegliere Aggiungi e quindi fare clic su Nuovo elemento.

  3. Nella finestra di dialogo Aggiungi nuovo elemento selezionare il modello di file XML .

  4. Nella casella Nome digitare [nome progetto].wpp.targets (ad esempio, ContactManager.Mvc.wpp.targets) e quindi fare clic su Aggiungi.

    Nella casella Nome digitare nome progetto.wpp.targets e quindi fare clic su Aggiungi.

    Nota

    Se si aggiunge un nuovo elemento al nodo radice di un progetto, il file viene creato nella stessa cartella del file di progetto. È possibile verificare questa operazione aprendo la cartella in Esplora risorse.

  5. Nel file aggiungere un elemento Project e un elemento ItemGroup :

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>    
      </ItemGroup>
    </Project>
    
  6. Se si desidera escludere cartelle dal pacchetto Web, aggiungere un elemento ExcludeFromPackageFolders all'elemento ItemGroup :

    1. Nell'attributo Include specificare un elenco delimitato da punto e virgola delle cartelle da escludere.

    2. Nell'elemento metadati FromTarget specificare un valore significativo per indicare il motivo per cui le cartelle vengono escluse, ad esempio il nome del file .wpp.targets .

      <ExcludeFromPackageFolders Include="Internal">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFolders>
      
  7. Per escludere i file dal pacchetto Web, aggiungere un elemento ExcludeFromPackageFiles all'elemento ItemGroup :

    1. Nell'attributo Includi specificare un elenco delimitato da punto e virgola dei file da escludere.

    2. Nell'elemento metadati FromTarget specificare un valore significativo per indicare il motivo per cui i file vengono esclusi, ad esempio il nome del file con estensione wpp.targets .

      <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
        <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
      </ExcludeFromPackageFiles>
      
  8. Il file [nome progetto].wpp.targets dovrebbe ora essere simile al seguente:

    <Project ToolsVersion="4.0" 
             xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <ItemGroup>   
        <ExcludeFromPackageFolders Include="Internal">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFolders>
        <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-
    vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js">
          <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget>
        </ExcludeFromPackageFiles>
      </ItemGroup>
    </Project>
    
  9. Salvare e chiudere il file [nome progetto].wpp.targets .

Alla successiva compilazione e pacchetto del progetto dell'applicazione Web, il file WPP rileverà automaticamente il file con estensione wpp.targets . Tutti i file e le cartelle specificati non verranno inclusi nel pacchetto Web.

Conclusione

Questo argomento descrive come escludere file e cartelle specifici quando si compila un pacchetto Web creando un file con estensione wpp.targets personalizzato nella stessa cartella del file di progetto dell'applicazione Web.

Altre informazioni

Per altre informazioni sull'uso di file di progetto di Microsoft Build Engine personalizzati (MSBuild) per controllare il processo di distribuzione, vedere Informazioni sul file di progetto e informazioni sul processo di compilazione. Per altre informazioni sul processo di creazione di pacchetti e distribuzione, vedere Compilazione e creazione di progetti applicazione Web per la creazione e la creazione di pacchetti Web, configurazione dei parametri per la distribuzione di pacchetti Web e distribuzione di pacchetti Web.