2015-10-29 7 views
7

Utilizzo gli strumenti di compilazione di Visual Studio Online per distribuire applicazioni Web da un'unica soluzione. Di tanto in tanto mi sono imbattuto in problemi di blocco dei file.Visual Studio Online/Azure che interrompe e avvia le applicazioni Web utilizzando PowerShell

Error: Web Deploy cannot modify the file 'Microsoft.CodeAnalysis.CSharp.dll' on the destination because it is locked by an external process.

Dopo un po 'Googling, credo che la "correzione" è quello di fermare le applicazioni Web prima della distribuzione su Azure e iniziare di nuovo dopo. Sembra giusto.

Tuttavia, non sembra esserci un modo semplice per farlo direttamente sulle definizioni di build di VSO. Ho creato un'attività di build "Azure Powershell", ma desidera un file PS1 dal repository. Non sembra permettermi di eseguire solo comandi di Azure Powershell (ad esempio Stop-AzureWebsite) da qui. Il mio team ha creato un work-around in cui abbiamo un "run.ps1" che esegue il comando che si passa come parametro, ma nessuno di noi è soddisfatto.

Cosa ci manca? Ci deve essere un modo più semplice per farlo senza avere uno script PS1 controllato nel controllo del codice sorgente.

risposta

3

Ho risolto questo problema installando Azure App Services - Start and Stop extension da Visual Studio Marketplace.
Quando installato, consente di avvolgere l'attività Deploy Website to Azure nella definizione di versione con le attività Azure AppServices Stop e Azure AppServices Start, eliminando in modo efficace i problemi di blocco.

VSO Release tasks

+0

Purtroppo non riesco a convalidarlo facilmente poiché ci siamo spostati su un server Jenkins = /. Questo sembra legittimo, quindi segnerò questa risposta. Quando ho guardato, l'estensione aveva solo 3/5 stelle ma sembra anche abbastanza nuova. Speriamo che i nodi vengano presto risolti. – agartee

1

Hai utilizzato il modello di distribuzione build che imposta i parametri msbuild corretti per il tuo pacchetto? È possibile vedere come here. Vorrei creare una build usando quel modello e vedere se hai gli stessi problemi. Se è così, mandami un messaggio su Twitter @DonovanBrown e vedrò se riesco a capire cosa sta succedendo.

+2

Sì, ma ultimamente questo progetto è stato afflitto da questo errore su Azure dispiega: ## [errore] Web Deploy non può modificare il file 'Microsoft.CodeAnalysis.CSharp.dll 'sulla destinazione perché è bloccato da un processo esterno. Per consentire il successo dell'operazione di pubblicazione, potrebbe essere necessario riavviare l'applicazione per rilasciare il blocco o utilizzare il gestore di regole AppOffline per le applicazioni .Net al successivo tentativo di pubblicazione. ## [errore] Ulteriori informazioni all'indirizzo: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE. – agartee

+0

Come nota a margine, non desidero realmente che le informazioni sulla distribuzione di Azure siano selezionate nel controllo del codice sorgente del progetto (nel formato a dello script Grunt o qualcosa del genere). Preferirei che fosse isolato dalla mia definizione di build. – agartee

+0

Ho anche trovato questo link (http://www.iis.net/learn/publish/deploying-application-packages/taking-an-application-offline-before-publishing) relativo alla regola AppOffline. È qualcosa che posso passare nel passaggio Distribuzione di app Web/Argomenti aggiuntivi di Azure? – agartee

1

Come regola, è buona norma disporre di script o comandi necessari per distribuire il software da controllare nel controllo del codice sorgente come parte della compilazione. Possono quindi essere facilmente eseguiti ripetutamente con poca configurazione a livello di build. Questo fornisce coerenza e trasparenza.

È ancora meglio pubblicare gli script di distribuzione come parte della build e utilizzare uno strumento di gestione delle versioni per controllare la distribuzione effettiva.

Indipendentemente dal fatto che la configurazione come codice è un mantra secondo cui tutti i team Dev e Ops dovrebbero vivere.

+0

Questo è certamente un parere =) – agartee

2

Verificare se si sta utilizzando "/" nel percorso "Pacchetto Web Deploy" per i separatori di cartelle anziché "\".

cioè cambiare

$(System.DefaultWorkingDirectory)/My Project/drop/MyFolder/MyFile.zip 

per

$(System.DefaultWorkingDirectory)\My Project\drop\MyFolder\MyFile.zip 

ho notato che era l'unica differenza tra quello che stavo ottenendo l'errore e gli altri (la fase di riavvio ho aggiunto non stava aiutando) . Una volta modificato il percorso, l'ho fatto funzionare.

Suoni scadenti, ma risolto il problema.