Domanda

Sto utilizzando una DLL nativa (FastImage.dll) in un servizio Web ASP.NET C# che a volte si blocca (non è possibile eliminarlo, dice accesso negato);ciò richiede l'arresto di IIS per eliminare la DLL.L'impossibilità di eliminare questa DLL nella cartella bin del servizio Web pubblicato mi impedisce di pubblicare con successo (anche se pensa che sia stata pubblicata con successo!), il che rende difficile lo sviluppo e la correzione del bug (specialmente quando esegue felicemente il vecchio codice dal momento che il mio le modifiche potrebbero non riflettersi sul server!).Tieni presente che il bug che causa il bombardamento del servizio Web e il blocco della DLL è nel mio codice, che è esterno a detta DLL, quindi penso che questo sia un problema più generale della semplice libreria FreeImage (per non causare loro calore).

  1. Qualcuno ha sperimentato questo?
  2. C'è un modo per assicurarsi che quando dice "Pubblicazione riuscita" dall'IDE VS significhi davvero, o per eseguire una sorta di script per verificare che i file siano realmente eliminati prima di tentare la pubblicazione (come un pre-build passaggio in VC++).(In questo momento elimino manualmente i file prima della pubblicazione per assicurarmi di sapere che le DLL sono state sostituite, invece di eseguire vecchie DLL.È ancora un problema, anche se non riesco a eliminare la DLL.)
  3. Come posso rilevare se un file è stato eliminato con successo da un file batch?(così posso interrompere e avviare IIS se fallisce)
  4. È possibile arrestare e avviare IIS da uno script (preferibilmente da Pubblica...azione nell'IDE VS) e, se sì, come?
È stato utile?

Soluzione

L'utilizzo dello strumento da riga di comando IISReset riavvierà IIS solo sul computer locale, non su un server remoto su cui stai pubblicando.

Supponendo che tu stia pubblicando su un server Windows 2003, suggerirei di provare il passaggio leggermente meno drastico di arrestare e riavviare IIS AppPool nel sito Web o nella cartella virtuale in cui viene eseguito il servizio Web.(In questo modo non stai portando offline tutti i siti eseguiti sul server di destinazione.) Anche questo presuppone che il servizio Web venga eseguito nel proprio pool di app.Idealmente dovrebbe, quindi tienilo isolato.

Consiglierei di abbandonare l'utilizzo del processo di pubblicazione e di esaminare l'utilizzo di un progetto di distribuzione Web.Ecco un post sul blog di ScottGu in dettaglio Progetti di distribuzione Web VS 2005.

Il vantaggio dell'approccio del progetto di distribuzione Web è che fornisce tutta la potenza e le funzionalità di MSbuild, poiché in realtà è solo un comodo involucro attorno a MSBuild.Ecco un post del team di MSBuild su funzionalità di pre-costruzione e post-costruzione

Spero che questo ti aiuti.

Altri suggerimenti

È possibile utilizzare lo strumento da riga di comando IISReset per arrestare/riavviare iis.Quindi potresti scrivere un semplice file batch per arrestare iis, copiare i file e quindi riavviare iis.Tuttavia, non sono sicuro di come integrarlo con la funzione di pubblicazione VS.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top