Condividi tramite


ASP.NET distribuzione Web con Visual Studio: Distribuzione da riga di comando

di Tom Dykstra

Scaricare il progetto iniziale

Questa serie di esercitazioni illustra come distribuire (pubblicare) un'applicazione Web ASP.NET in app Azure Service 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 della serie.

Panoramica

Questa esercitazione illustra come richiamare la pipeline di pubblicazione Web di Visual Studio dalla riga di comando. Ciò è utile per gli scenari in cui si vuole automatizzare il processo di distribuzione anziché eseguirlo manualmente in Visual Studio, in genere usando un sistema di controllo della versione del codice sorgente.

Apportare una modifica per la distribuzione

Attualmente nella pagina Informazioni viene visualizzato il codice del modello.

Informazioni sulla pagina con codice modello

Questa operazione verrà sostituita con il codice che visualizza un riepilogo della registrazione degli studenti.

Aprire la pagina About.aspx , eliminare tutto il markup all'interno dell'elemento MainContent Content e inserire il markup seguente al suo posto:

<h2>Student Body Statistics</h2>
    <asp:ObjectDataSource ID="StudentStatisticsObjectDataSource" runat="server" TypeName="ContosoUniversity.BLL.SchoolBL"
        SelectMethod="GetStudentStatistics" DataObjectTypeName="ContosoUniversity.DAL.EnrollmentDateGroup">
    </asp:ObjectDataSource>
    <asp:GridView ID="StudentStatisticsGridView" runat="server" AutoGenerateColumns="False"
        DataSourceID="StudentStatisticsObjectDataSource">
        <Columns>
            <asp:BoundField DataField="EnrollmentDate" DataFormatString="{0:d}" HeaderText="Date of Enrollment"
                ReadOnly="True" SortExpression="EnrollmentDate" />
            <asp:BoundField DataField="StudentCount" HeaderText="Students" ReadOnly="True"
                SortExpression="StudentCount" />
        </Columns>
    </asp:GridView>

Eseguire il progetto e selezionare la pagina Informazioni su .

Pagina About

Eseguire la distribuzione in test usando la riga di comando

Non verrà distribuita un'altra modifica del database, quindi disabilitare la distribuzione del database dbDacFx per il database aspnet-ContosoUniversity. Aprire la procedura guidata Pubblica web e, in ognuno dei tre profili di pubblicazione, deselezionare la casella di controllo Aggiorna database nella scheda Impostazioni .

Nella pagina iniziale di Windows 8 cercare Prompt dei comandi per gli sviluppatori per VS2012.

Fare clic con il pulsante destro del mouse sull'icona del prompt dei comandi per gli sviluppatori per VS2012 e scegliere Esegui come amministratore.

Immettere il comando seguente al prompt dei comandi, sostituendo il percorso del file della soluzione con il percorso del file della soluzione:

msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=Test

MSBuild compila la soluzione e la distribuisce nell'ambiente di test.

Output della riga di comando

Aprire un browser e passare a http://localhost/ContosoUniversity, quindi fare clic sulla pagina Informazioni per verificare che la distribuzione abbia avuto esito positivo.

Se non sono stati creati studenti nel test, verrà visualizzata una pagina vuota sotto l'intestazione Student Body Statistics .If you't created any students in test, you'll see an empty page under the Student Body Statistics heading. Passare alla pagina Studenti , fare clic su Aggiungi studente e aggiungere alcuni studenti, quindi tornare alla pagina Informazioni per visualizzare le statistiche degli studenti.

Screenshot che mostra le statistiche relative al corpo degli studenti nella pagina Informazioni.

Opzioni della riga di comando chiave

Il comando immesso ha passato il percorso del file della soluzione e due proprietà a MSBuild:

msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true 
/p:PublishProfile=Test

Distribuzione della soluzione rispetto alla distribuzione di singoli progetti

Se si specifica il file di soluzione, tutti i progetti nella soluzione verranno compilati. Se nella soluzione sono presenti più progetti Web, si applica il comportamento di MSBuild seguente:

  • Le proprietà specificate nella riga di comando vengono passate a ogni progetto. Di conseguenza, ogni progetto Web deve avere un profilo di pubblicazione con il nome specificato. Se si specifica /p:PublishProfile=Test, ogni progetto Web deve avere un profilo di pubblicazione denominato Test.
  • È possibile pubblicare correttamente un progetto quando un altro non ne esegue nemmeno la compilazione. Per altre informazioni, vedere l'errore msBuild del thread stackoverflow con due pacchetti.

Se si specifica un singolo progetto anziché una soluzione, è necessario aggiungere un parametro che specifica la versione di Visual Studio. Se si usa Visual Studio 2012, la riga di comando sarà simile all'esempio seguente:

msbuild C:\ContosoUniversity\ContosoUniversity\ContosoUniversity.csproj /p:DeployOnBuild=true /p:PublishProfile=Test /p:VisualStudioVersion=11.0

Il numero di versione per Visual Studio 2010 è 10.0. Per altre informazioni, vedere Compatibilità dei progetti di Visual Studio e VisualStudioVersion nel blog di Sayed Hashimi.

Specifica del profilo di pubblicazione

È possibile specificare il profilo di pubblicazione in base al nome o al percorso completo del file pubxml , come illustrato nell'esempio seguente:

msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=C:\ContosoUniversity\ContosoUniversity\Properties\PublishProfiles\Test.pubxml

Metodi di pubblicazione Web supportati per la pubblicazione da riga di comando

Per la pubblicazione da riga di comando sono supportati tre metodi di pubblicazione:

  • MSDeploy - Pubblicare usando Distribuzione Web.
  • Package - Pubblicare creando un pacchetto di distribuzione Web. È necessario installare il pacchetto separatamente dal comando MSBuild che lo crea.
  • FileSystem - Pubblicare copiando i file in una cartella specificata.

Specifica della configurazione e della piattaforma di compilazione

La configurazione e la piattaforma di compilazione devono essere impostate in Visual Studio o nella riga di comando. I profili di pubblicazione includono proprietà denominate LastUsedBuildConfiguration e LastUsedPlatform, ma non è possibile impostare queste proprietà per determinare come viene compilato il progetto. Per altre informazioni, vedere MSBuild: come impostare la proprietà di configurazione nel blog di Sayed Hashimi.

Eseguire la distribuzione per lo staging

Per eseguire la distribuzione in Azure, è necessario aggiungere la password alla riga di comando. Se la password è stata salvata nel profilo di pubblicazione in Visual Studio, è stata archiviata in formato crittografato nel file .pubxml.user . Questo file non è accessibile da MSBuild quando si esegue una distribuzione da riga di comando, quindi è necessario passare la password in un parametro della riga di comando.

  1. Copiare la password necessaria dal file con estensione publishsettings scaricato in precedenza per il sito Web di staging. La password è il valore dell'attributo per l'elemento userPWD Web Deploy publishProfile .

    Password di distribuzione Web

  2. Nella pagina Start di Windows 8 cercare Prompt dei comandi per gli sviluppatori per VS2012 e fare clic sull'icona per aprire il prompt dei comandi. Non è necessario aprirlo come amministratore questa volta perché non si esegue la distribuzione in IIS nel computer locale.

  3. Immettere il comando seguente al prompt dei comandi, sostituendo il percorso del file della soluzione con il percorso del file della soluzione e la password con la password:

    msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=Staging /p:Password=hdNSWsbuqno7J5uqnwKafwlfNPt1DSco7J5uqnwKafwlfNPt1DSpKHuYgCco7J5 /p:AllowUntrustedCertificate=true
    

    Si noti che questa riga di comando include un parametro aggiuntivo: /p:AllowUntrustedCertificate=true. Poiché questa esercitazione viene scritta, la AllowUntrustedCertificate proprietà deve essere impostata quando si esegue la pubblicazione in Azure dalla riga di comando. Quando viene rilasciata la correzione per questo bug, non sarà necessario tale parametro.

  4. Aprire un browser e passare all'URL del sito di gestione temporanea e quindi fare clic sulla pagina Informazioni per verificare che la distribuzione abbia avuto esito positivo.

    Come illustrato in precedenza per l'ambiente di test, potrebbe essere necessario creare alcuni studenti per visualizzare le statistiche nella pagina Informazioni.

Distribuzione nell'ambiente di produzione

Il processo di distribuzione nell'ambiente di produzione è simile al processo di gestione temporanea.

  1. Copiare la password necessaria dal file con estensione publishsettings scaricato in precedenza per il sito Web di produzione.

  2. Aprire il prompt dei comandi per gli sviluppatori per VS2012.

  3. Immettere il comando seguente al prompt dei comandi, sostituendo il percorso del file della soluzione con il percorso del file della soluzione e la password con la password:

    msbuild C:\ContosoUniversity\ContosoUniversity.sln /p:DeployOnBuild=true /p:PublishProfile=Production /p:Password=hdNSWsbuqnwKafwlo7J5uqnwKafwlfNPt1DSqnwKafwlfNPt1DSpKHuYgCco7J5 /p:AllowUntrustedCertificate=true
    

    Per un sito di produzione reale, se è stata apportata anche una modifica al database, è in genere necessario copiare il file app_offline.htm nel sito prima della distribuzione ed eliminarlo dopo la corretta distribuzione.

  4. Aprire un browser e passare all'URL del sito di gestione temporanea e quindi fare clic sulla pagina Informazioni per verificare che la distribuzione abbia avuto esito positivo.

Riepilogo

È stato ora distribuito un aggiornamento dell'applicazione usando la riga di comando.

Screenshot che mostra la pagina Informazioni che mostra le statistiche relative al corpo degli studenti.

Nell'esercitazione successiva verrà illustrato un esempio di come estendere la pipeline di pubblicazione Web. L'esempio illustra come distribuire i file non inclusi nel progetto.