2012-08-15 13 views
19

Ho costruito un sito Web diverse volte utilizzando l'impostazione predefinita "consenti a questo sito precompilato di essere aggiornabile", tuttavia nella compilazione più recente il sito Web era molto danneggiato. Dopo aver giocato con i file .dll (cancellandoli e sostituendoli, nel cestino) ho notato che alcune parti del sito Web riprendevano a funzionare, ma se avessi inserito tutte le .dll originali nel sito non funzionava.Qual è la differenza tra consentire una pagina Web di Visual Studio precompilata per essere aggiornabile e non?

Sto usando pagine aspx con diverse estensioni web Ajax. Questi sono stati aggiunti di recente e potrebbero essere la fonte del problema. Ho deselezionato "Consenti a questo sito precompilato di essere aggiornabile" e ha aggiunto tutti i tipi di file di codice compilati extra al cestino, e tutti i problemi con il sito Web sono andati via ... cosa sta succedendo qui? Qual è stata la differenza?

Non sembra ci sia alcuna differenza nel modo in cui aggiornare il sito o, solo un dritto pubblicare da Visual Studio ogni volta.

Eventuali approfondimenti sarebbero apprezzati.

risposta

16

deselezionando l'opzione "Consenti a questo sito precompilato per essere aggiornabile" compila il pagine aspx, non solo i file di codice (.VB/.CS). Lasciandolo selezionato consente di apportare determinate modifiche ai file .Aspx dopo che è stato distribuito senza ricompilare (ex = spostare la posizione di un controllo o aggiungere un ulteriore markup HTML).

Dopo aver letto la tua descrizione dei problemi di distribuzione sembra più probabile che gli errori sono a causa IIS ha bisogno l'App Pool rinfrescato. Su un VPS di fascia bassa, a volte ha senso rimbalzare (riavvialo) se hai quel lusso.

Leggere i seguenti articoli MSDN per ulteriori informazioni sulla precompilazione del sito.

http://msdn.microsoft.com/en-us/library/399f057w(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/ms247286(v=vs.80).aspx

5

ho una risposta per le mie domande, in base a ciò NoAlias ​​detto. Ho letto i due link e trovato il seguente:

precompilazione per la distribuzione solo
Quando si precompila per la distribuzione solo, il compilatore produce assemblee da praticamente tutti i file di origine ASP.NET che normalmente vengono compilati a tempo di esecuzione. Questo include il codice di programma in pagine, file di classe .cs e .vb, altri file di codice e file di risorse . Il compilatore rimuove tutta la sorgente e il markup dall'output . Nel layout risultante, i file compilati vengono generati per ogni dei file .aspx (con estensione .compiled) che contengono i puntatori nell'assembly appropriato per quella pagina. Per modificare il sito Web , incluso il layout delle pagine, è necessario modificare i file originali , ricompilare il sito e ridistribuire il layout. L'unica eccezione è la configurazione del sito; è possibile apportare modifiche al file Web.config sul server di produzione senza dover ricompilare il sito. L'opzione offre il massimo grado di protezione per le tue pagine e le migliori prestazioni all'avvio.

precompilazione per la distribuzione e l'aggiornamento
Quando si precompila per la distribuzione e l'aggiornamento, il compilatore produce gruppi da tutto il codice sorgente (eccetto il codice delle pagine in pagine single-file) e da altri file che normalmente producono assemblee , come i file di risorse. Il compilatore converte i file .aspx in singoli file che utilizzano il modello code-behind compilato e ne copia nel layout. Questa opzione consente di apportare modifiche limitate alle pagine Web ASP.NET del sito dopo averle compilate. Per esempio , è possibile modificare la disposizione di controlli, colori, caratteri, e altri aspetti di aspetto delle pagine. È anche possibile aggiungere controlli, come , poiché non richiedono gestori di eventi o altro codice. Quando il sito viene eseguito la prima volta, ASP.NET esegue un'ulteriore compilazione nell'ordine per creare l'output dal markup. Nota

Un sito aggiornabile precompilato non consente a più pagine di di fare riferimento alla stessa classe CodeFile.

avevo recente apportate delle modifiche al sito per includere 2 pagine aspx che fa riferimento lo stesso CodeFile (lo stesso codice VB in background) Ogni pagina ha avuto leggermente diverse proprietà html, ma necessari per avere CodeFiles identici, quindi per la mia seconda pagina ASP ho eliminato il file di codice VB generato automaticamente e quindi ho fatto riferimento a un CodeFile diverso nell'HTML.

Come indicato sopra, i siti aggiornabili precompilati non consentono a più pagine di fare riferimento alla stessa classe di codice file. Ecco perché alcune delle mie pagine non funzionavano.

Da questo momento in poi, devo evitare di utilizzare la casella di controllo predefinita "Consenti a questo sito precompilato di essere aggiornabile"; Deve rimanere deselezionato affinché il mio sito Web utilizzi il CodeFiles VB a cui si riferiscono le mie pagine multiple.

Conclusione: più pagine di aspx che fanno riferimento allo stesso CodeFile devono essere precompilate per essere eseguite correttamente. Ciò significa che il sito non sarà in grado di apportare modifiche senza re-deplyoying.