Condividi tramite


ASP.NET distribuzione Web con Visual Studio: Distribuzione di file aggiuntivi

di Tom Dykstra

Scaricare il progetto iniziale

Questa serie di esercitazioni illustra come distribuire (pubblicare) un'applicazione Web ASP.NET in Servizio app di Azure App Web o in un provider di hosting di terze parti usando Visual Studio 2012 o Visual Studio 2010. Per informazioni sulla serie, vedere la prima esercitazione nella serie.

Panoramica

Questa esercitazione illustra come estendere la pipeline di pubblicazione Web di Visual Studio per eseguire un'attività aggiuntiva durante la distribuzione. L'attività consiste nel copiare file aggiuntivi che non si trovano nella cartella del progetto nel sito Web di destinazione.

Per questa esercitazione si copia un file aggiuntivo: robots.txt. Si vuole distribuire questo file nella gestione temporanea, ma non nell'ambiente di produzione. Nell'esercitazione Distribuzione in produzione è stato aggiunto questo file al progetto e configurato il profilo di pubblicazione produzione per escluderlo. In questa esercitazione verrà visualizzato un metodo alternativo per gestire questa situazione, uno che sarà utile per tutti i file da distribuire, ma non si vuole includere nel progetto.

Spostare il file di robots.txt

Per preparare un metodo diverso per gestire robots.txt, in questa sezione dell'esercitazione si sposta il file in una cartella non inclusa nel progetto e si elimina robots.txt dall'ambiente di gestione temporanea. È necessario eliminare il file dalla gestione temporanea in modo che sia possibile verificare che il nuovo metodo di distribuzione del file in tale ambiente funzioni correttamente.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul file robots.txt e scegliere Escludi dal progetto.

  2. Usando Windows Esplora file, creare una nuova cartella nella cartella della soluzione e denominarla ExtraFiles.

  3. Spostare il file robots.txt dalla cartella del progetto ContosoUniversity alla cartella ExtraFiles .

    Cartella ExtraFiles

  4. Usando lo strumento FTP, eliminare il file robots.txt dal sito Web di staging.

    In alternativa, è possibile selezionare Rimuovi file aggiuntivi nella destinazione in Opzioni di pubblicazione file nella scheda Impostazioni del profilo di pubblicazione di staging e ripubblicare la gestione temporanea nella gestione temporanea.

Aggiornare il file del profilo di pubblicazione

È necessario robots.txt solo nella gestione temporanea, quindi l'unico profilo di pubblicazione da aggiornare per distribuirlo è Staging.

  1. In Visual Studio aprire Staging.pubxml.

  2. Alla fine del file, prima del tag di chiusura </Project> , aggiungere il markup seguente:

    <Target Name="CustomCollectFiles">
        <ItemGroup>
          <_CustomFiles Include="..\ExtraFiles\**\*" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
    

    Questo codice crea una nuova destinazione che raccoglierà altri file da distribuire. Una destinazione è costituita da una o più attività eseguite da MSBuild in base alle condizioni specificate.

    L'attributo Include specifica che la cartella in cui trovare i file è ExtraFiles, che si trova allo stesso livello della cartella del progetto. MSBuild raccoglierà tutti i file da tale cartella e ricorsivamente da qualsiasi sottocartella (l'asterisco doppio specifica le sottocartelle ricorsive). Con questo codice è possibile inserire più file e file nelle sottocartelle all'interno della cartella ExtraFiles e tutti verranno distribuiti.

    L'elemento DestinationRelativePath specifica che le cartelle e i file devono essere copiati nella cartella radice del sito Web di destinazione, nella stessa struttura di file e cartelle presenti nella cartella ExtraFiles . Se si vuole copiare la cartella ExtraFiles stessa, il DestinationRelativePath valore sarà ExtraFiles\%(RecursiveDir)%(Filename)%(Extension).

  3. Alla fine del file, prima del tag di chiusura </Project> , aggiungere il markup seguente che specifica quando eseguire la nuova destinazione.

    <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
    
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
    </PropertyGroup>
    

    Questo codice causa l'esecuzione della nuova CustomCollectFiles destinazione ogni volta che viene eseguita la destinazione che copia i file nella cartella di destinazione. Esiste una destinazione separata per la pubblicazione e la creazione del pacchetto di distribuzione e la nuova destinazione viene inserita in entrambe le destinazioni nel caso in cui si decide di distribuire usando un pacchetto di distribuzione anziché la pubblicazione.

    Il file pubxml è ora simile all'esempio seguente:

    <?xml version="1.0" encoding="utf-8"?>
    <!--
    This file is used by the publish/package process of your Web project. You can customize the behavior of this process
    by editing this MSBuild file. In order to learn more about this please visit https://go.microsoft.com/fwlink/?LinkID=208121. 
    -->
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <PropertyGroup>
        <WebPublishMethod>MSDeploy</WebPublishMethod>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish>http://contosou-staging.azurewebsites.net</SiteUrlToLaunchAfterPublish>
        <ExcludeApp_Data>True</ExcludeApp_Data>
        <MSDeployServiceURL>waws-prod-bay-001.publish.azurewebsites.windows.net:443</MSDeployServiceURL>
        <DeployIisAppPath>contosou-staging</DeployIisAppPath>
        <RemoteSitePhysicalPath />
        <SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>
        <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
        <UserName>$contosou-staging</UserName>
        <_SavePWD>True</_SavePWD>
        <PublishDatabaseSettings>
          <Objects xmlns="">
            <ObjectGroup Name="SchoolContext" Order="1" Enabled="True">
              <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" />
              <Object Type="DbCodeFirst">
                <Source Path="DBMigration" DbContext="ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL" MigrationConfiguration="ContosoUniversity.DAL.Migrations.Configuration, ContosoUniversity.DAL" Origin="Configuration" />
              </Object>
            </ObjectGroup>
            <ObjectGroup Name="DefaultConnection" Order="2" Enabled="False">
              <Destination Path="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User ID=CU-staging-admin@sk0264hvc9;Password=" Name="Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=" />
              <Object Type="DbDacFx">
                <PreSource Path="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf;Initial Catalog=aspnet-ContosoUniversity;Integrated Security=True" includeData="False" />
                <Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" />
              </Object>
              <UpdateFrom Type="Web.Config">
                <Source MatchValue="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;Initial Catalog=aspnet-ContosoUniversity;AttachDBFilename=|DataDirectory|\aspnet-ContosoUniversity.mdf" MatchAttributes="$(UpdateFromConnectionStringAttributes)" />
              </UpdateFrom>
              <Object Type="DbFullSql" Enabled="False">
                <Source Path="..\aspnet-data-prod.sql" Transacted="False" />
              </Object>
            </ObjectGroup>
          </Objects>
        </PublishDatabaseSettings>
        <EnableMSDeployBackup>False</EnableMSDeployBackup>
      </PropertyGroup>
      <ItemGroup>
        <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String">
          <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue>
        </MSDeployParameterValue>
        <MSDeployParameterValue Include="$(DeployParameterPrefix)SchoolContext-Web.config Connection String">
          <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue>
        </MSDeployParameterValue>
      </ItemGroup>
      <Target Name="CustomCollectFiles">
        <ItemGroup>
          <_CustomFiles Include="..\ExtraFiles\**\*" />
          <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
            <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
          </FilesForPackagingFromProject>
        </ItemGroup>
      </Target>
      <PropertyGroup>
        <CopyAllFilesToSingleFolderForPackageDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForPackageDependsOn);
        </CopyAllFilesToSingleFolderForPackageDependsOn>
    
        <CopyAllFilesToSingleFolderForMsdeployDependsOn>
          CustomCollectFiles;
          $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
        </CopyAllFilesToSingleFolderForMsdeployDependsOn>
      </PropertyGroup>
    </Project>
    
  4. Salvare e chiudere il file Staging.pubxml .

Pubblicare nella gestione temporanea

Usando una sola clic sulla pubblicazione o sulla riga di comando, pubblicare l'applicazione usando il profilo di gestione temporanea.

Se si usa un clic su pubblica, è possibile verificare nella finestra anteprima che robots.txt verrà copiata. In caso contrario, usare lo strumento FTP per verificare che il file dirobots.txt si trova nella cartella radice del sito Web dopo la distribuzione.

Riepilogo

Questa serie di esercitazioni viene completata sulla distribuzione di un'applicazione Web ASP.NET a un provider di hosting di terze parti. Per altre informazioni su uno degli argomenti descritti in queste esercitazioni, vedere la ASP.NET Mappa contenuto distribuzione.

Altre informazioni

Se si sa come usare i file MSBuild, è possibile automatizzare molte altre attività di distribuzione scrivendo codice nei file pubxml (per le attività specifiche del profilo) o il file con estensione wpp.targets del progetto (per le attività che si applicano a tutti i profili). Per altre informazioni sui file con estensione pubxml e wpp.targets , vedere Procedura: Modificare le impostazioni di distribuzione nei file Pubblica profilo (pubxml) e il file con estensione wpp.targets nei progetti Web di Visual Studio. Per un'introduzione di base al codice MSBuild, vedere L'anatomia di un file di progetto nella serie di distribuzione enterprise: comprensione del file di progetto. Per informazioni su come usare i file MSBuild per eseguire attività per scenari personalizzati, vedere questo libro: All'interno del Microsoft Build Engine: Using MSBuild and Team Foundation Build by Sayed Ibraham Hashimi e William Bartholomew.

Riconoscimenti

Vorrei ringraziare le persone seguenti che hanno contribuito significativamente al contenuto di questa serie di esercitazioni: