Cenni preliminari sulla compilazione in ASP.NET
Aggiornamento: novembre 2007
Per consentire al codice dell'applicazione di soddisfare le richieste inviate dagli utenti, è innanzitutto necessario compilare il codice in ASP.NET in uno o più assembly, ovvero file con estensione dll. È possibile scrivere codice ASP.NET in molti linguaggi differenti, come Visual Basic, C#, J# e altri. Durante la compilazione, il codice viene convertito in una rappresentazione indipendente dal linguaggio e dalla CPU denominata Microsoft Intermediate Language (MSIL). In fase di esecuzione, MSIL viene eseguito nel contesto di .NET Framework e convertito in istruzioni specifiche della CPU per il processore presente sul computer sul quale viene eseguita l'applicazione.
I vantaggi offerti dalla compilazione del codice applicativo includono:
**Prestazioni **Il codice compilato viene eseguito molto più velocemente rispetto ai linguaggi di script come ECMAScript o VBScript perché è una rappresentazione molto più prossima al codice macchina e non richiede analisi aggiuntive.
**Protezione **È molto più complesso eseguire il reverse engineering del codice compilato rispetto al codice sorgente non compilato perché il codice compilato non dispone delle caratteristiche di leggibilità e astrazione di un linguaggio ad alto livello. Sono inoltre disponibili strumenti di offuscamento che rendono ancora più difficoltoso il reverse engineering del codice compilato.
Stabilità In fase di compilazione il codice viene controllato per verificare la presenza di errori di sintassi, l'indipendenza dai tipi e altri problemi. L'intercettazione di questi errori in fase di compilazione consente di eliminare molti errori nel codice.
Interoperabilità Poiché il codice MSIL supporta qualsiasi linguaggio .NET, è possibile utilizzare nel codice assembly originariamente scritti in altri linguaggi. Se, ad esempio, si scrive una pagina Web ASP.NET in C#, è possibile aggiungere un riferimento a un file dll scritto in Visual Basic.
L'architettura di compilazione ASP.NET include numerose funzionalità, tra cui:
Supporto di più linguaggi
Compilazione automatica
Distribuzione flessibile
Sistema di compilazione estendibile
Nelle sezioni riportate di seguito vengono descritte le singole funzionalità.
Supporto di più linguaggi
In ASP.NET 2.0 è possibile utilizzare nella stessa applicazione linguaggi diversi, ad esempio Visual Basic e C#, perché ASP.NET crea un assembly per ogni linguaggio. Per il codice memorizzato nella cartella App_Code, è possibile specificare una sottocartella per ogni linguaggio. Per ulteriori informazioni sulla cartella App_Code, vedere Cartelle di codice condivise nei siti Web ASP.NET.
Compilazione automatica
In ASP.NET il codice dell'applicazione e le risorse dipendenti vengono compilate automaticamente la prima volta che un utente richiede una risorsa del sito Web. In genere, viene creato un assembly per ogni directory dell'applicazione, ad esempio App_Code, e uno per la directory principale. Se i file di una directory sono scritti in linguaggi di programmazione differenti, verranno creati assembly distinti per ogni linguaggio. È possibile specificare le directory da compilare in singoli assembly nella sezione Compilation del file Web.config.
Distribuzione flessibile
Poiché il sito Web viene compilato alla prima richiesta di un utente, è possibile copiare semplicemente il codice sorgente dell'applicazione nel server Web di produzione. Tuttavia, in ASP.NET sono anche disponibili opzioni di precompilazione che consentono di compilare il sito Web prima o dopo la relativa distribuzione ma prima che un utente lo richieda. La precompilazione presenta diversi vantaggi. Può migliorare le prestazioni del sito Web alla prima richiesta in quanto non occorre attendere il tempo necessario per la compilazione. Grazie alla precompilazione è anche possibile rilevare errori che potrebbero altrimenti essere individuati solo quando un utente richiede una pagina. Infine, se si precompila il sito Web prima di distribuirlo, è possibile distribuire gli assembly anziché il codice sorgente.
È possibile precompilare un sito Web utilizzando il compilatore di ASP.NET, ASPNET_Compiler.exe, che fornisce le seguenti opzioni di precompilazione:
Compilazione sul posto Questa opzione consente di eseguire una compilazione identica a quella eseguita durante la compilazione dinamica e deve essere utilizzata per compilare un sito Web già distribuito a un server di produzione.
Precompilazione completa non aggiornabile Utilizzare questa opzione per compilare un'applicazione e quindi copiare l'output compilato nel server di produzione. Il codice applicativo, il markup e il codice dell'interfaccia utente vengono compilati in assembly. I file segnaposto, quali le pagine aspx, risultano ancora disponibili per consentire l'esecuzione di attività specifiche dei file come la configurazione delle autorizzazioni, ma non contengono codice aggiornabile. Per aggiornare una pagina o un codice è necessario precompilare e distribuire nuovamente il sito Web.
Precompilazione aggiornabile È simile alla precompilazione completa non aggiornabile, con l'eccezione che gli elementi dell'interfaccia utente quali le pagine aspx e i controlli ascx mantengono tutti il markup, il codice UI e il codice inline, se disponibili. Il codice può essere aggiornato nel file al termine della relativa distribuzione. Le modifiche apportate al file verranno rilevate e il file verrà ricompilato. Tenere presente che il codice di un file code-behind, con estensione vb o cs, viene incorporato in assembly durante la precompilazione e pertanto non è possibile modificarlo senza ripetere nuovamente i passaggi di precompilazione e distribuzione.
Per ulteriori informazioni, vedere la classe Cenni preliminari sulla precompilazione in ASP.NET.
Sistema di compilazione estensibile
ASP.NET utilizza le classi BuildProvider per compilare gli elementi quali le pagine aspx, .i file ascx e le risorse globali. È possibile estendere e personalizzare il sistema di compilazione di ASP.NET per compilare risorse personalizzate creando classi che ereditano dalla classe BuildProvider. Ad esempio, è possibile aggiungere un nuovo tipo di file e quindi scrivere una classe BuildProvider che compili quello specifico tipo di file.