2015-08-19 9 views
6

Ho creato un progetto fittizio Hello World ASP.NET 5 (MVC 6) ospitato in Git di Visual Studio Online. Ho seguito i passaggi descritti in this document per creare e distribuire nei miei siti Web di Azure.Costruire ASP.NET 5 su siti Web di Azure da Visual Studio Online ERROR_FILE_IN_USE

Ci sono voluti diversi tentativi perché la compilazione falliva con errori come "Impossibile ripristinare il pacchetto NuGet" o la persistente wwwfolder (che dovevo impegnare per il controllo del codice sorgente per farlo funzionare) ma l'ho fatto funzionare e l'app è installato e funzionante.

Il problema con cui ho bisogno di aiuto è con la configurazione di integrazione continua. In Visual Studio ho selezionato un trigger CI per creare/distribuire ogni volta che c'è un check-in nel mio ramo master. Questo avvia il tentativo in modo corretto ma non riesce costantemente con questo errore.

Error Code: ERROR_FILE_IN_USE More Information: Web Deploy cannot modify the file 'AspNet.Loader.dll' on the destination because it is locked by an external process. In order to allow the publish operation to succeed, you may need to either restart your application to release the lock, or use the AppOffline rule handler for .Net applications on your next publish attempt.

Come risolvere questo problema?

Grazie.

PS: Inoltre non so perché nei siti Web di Azure in Deployment non riesco a vedere il registro. Quando stavo usando un hook GitHub utilizzato per visualizzare tutte le distribuzioni fallite/riuscite.

Di solito in Azure sotto la web app> implementazioni

risposta

1

Ho incontrato lo stesso problema. Ci sono probabilmente modi più eleganti per gestirlo se si dispone di più slot di distribuzione, ma per la mia situazione che ha un minuto di downtime durante la distribuzione è accettabile.

È possibile modificare lo script per utilizzare Start-AzureWebsite e Stop-AzureWebsite Nota: ho aggiunto $ hostNameIndex poiché è necessario modificare se si aggiungono nomi di dominio. È quindi possibile passare questo negli argomenti di Script di PowerShell di Azure.

 
    param($websiteName, $packOutput, $hostNameIndex = 1) 
    Stop-AzureWebsite -Name $websiteName 
    $website = Get-AzureWebsite -Name $websiteName 

    # get the scm url to use with MSDeploy. 
    # By default this will be the second in the array. Changes when you add custom domain names. 
    # Here I have the default and 2 custom so scm is in 4th position ie. index: 3 
    $msdeployurl = $website.EnabledHostNames[$hostNameIndex] 

    $publishProperties = @{'WebPublishMethod'='MSDeploy'; 
         'MSDeployServiceUrl'=$msdeployurl; 
         'DeployIisAppPath'=$website.Name; 
         'Username'=$website.PublishingUsername; 
         'Password'=$website.PublishingPassword} 


    $publishScript = "${env:ProgramFiles(x86)}\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Web Tools\Publish\Scripts\default-publish.ps1" 


    . $publishScript -publishProperties $publishProperties -packOutput $packOutput 
    Start-AzureWebsite -Name $websiteName 

Risorse:

  1. https://msdn.microsoft.com/en-us/library/azure/dn495288.aspx
  2. https://msdn.microsoft.com/en-us/library/azure/dn495185.aspx
  3. https://msdn.microsoft.com/Library/vs/alm/Build/azure/deploy-aspnet5
+0

Grazie. Questa è una buona soluzione, ma non riesco a capire perché questa implementazione non sfrutta il nuovo compilatore e semplicemente aggiorna l'applicazione senza riavviarla .. :( – iberodev

+1

Non sono sicuro che Roslyn abbia troppe cose da fare qui. Con Roslyn stiamo compilando gli artefatti in memoria anziché le dll basate su file mentre si lavora: qui la build sta creando dll come artefatti di build e quindi li spinge in Azure. Credo che il pool di app venga ancora riciclato quando viene apportato un cambio di codice Il problema qui è che il programma di caricamento è bloccato e interrompendo il sito Web lo costringiamo a lasciarlo andare. Spero che abbia senso? Spero anche che sia corretto :) –

+0

Eccellente, ha senso. – iberodev