Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Compilazione automatica del codice

Usare correttamente la cartella App_Code
Usare correttamente la cartella App_Code
Link copiato negli appunti

In ASP.NET 1.x tutto il codice delle pagine è compilato in assembly, librerie che vengono memorizzate nella cartella /bin dell'applicazione. Le pagine web invece, per intenderci, quelle con estensione .aspx, sono compilate automaticamente. Ogni cambiamento fatto sulla pagina .aspx  provoca la ricompilazione della pagina ma non del suo codice interno, presente nella cartella /bin, che va invece ricompilato a parte.

In ASP.NET 2.0 invece, vengono ricompilate dinamicamente, su ogni modifica al codice, sia le pagine .aspx sia i file .cs o .vb. La cartella /bin non ha più ragione di esistere ma è ancora supportata per compatibilità con le versioni precedenti. Ci sono altre cartelle "speciali" che invece è utile conoscere e che possono essere utili nello sviluppo di applicazioni.

  • App_Code, contenitore per le classi, i file WSDL e XSD; tutti i file contenuti in questa cartella sono ricompilati automaticamente;
  • App_Data, contenitore per i file di database e XML;
  • App_LocalResources, contenitore per i file generati dal VWD (o Visual Studio) per la localizzazione implicita dell'applicazione;
  • App_GlobalResources, contenitore per i file per la localizzazione esplicita dell'applicazione, con estensione .resx;
  • App_Themes, contenitore per i temi e i file di interfaccia (skin);
  • App_Browsers, contenitore per i file browser che servono per supportare diversi tipi di client;
  • App_WebReferences, contenitore per i file .wsdl che servono per i web service;

In questo articolo, utilizzando la cartella App_Code, verifichiamo la ricompilazione automatica della parte codice interno di una pagina.

Apriamo un nuovo sito web con il VWD e chiamiamolo "RicompilazioneDinamica", aggiungiamo alla nostra applicazione la cartella speciale App_Code e all'interno di essa, implementiamo una classe che poi utilizzeremo nella nostra pagina. Chiamiamo la classe DataOra.cs:

Listato 1. Classe "DataOra"

public class DataOra
{
  public DataOra()
  {

    // costruttore della classe

  }
  
  public string ottieniDataOra()
  {
    return "Data e ora del server: " + DateTime.Now;
  }
}

Il costruttore lo possiamo lasciare vuoto, mentre dobbiamo implementare il metodo ottieniDataOra che restituisce una stringa con la data e l'ora del server.

Passiamo alla pagina di default. Nel codice, precisamente all'interno del gestore dell'evento Page_Load, scriviamo:

Listato 2. Page_Load in Default.aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
  DataOra dataOraServer = new DataOra();
  Response.Write(dataOraServer.ottieniDataOra());
}

Qui istanziamo un nuovo oggetto di tipo DataOra e poi chiamiamo il metodo ottieniDataOra.

Sul VWD premiamo F5 per testare l'applicazione. Otteniamo:

Figura 1. Primo Test

Primo Test

Ora, senza chiudere il browser, modifichiamo con il blocco note il file DataOra.cs, presente all'interno della cartella App_Code della nostra applicazione, e facciamo una modifica, ad esempio scriviamo: "Data e ora corrente sul server: " al posto di "Data e ora del Server: ".

Figura 2. Test: modifica con il blocco note
Test: modifica con il blocco note

Salviamo e aggiorniamo la visualizzazione sul browser. Otteniamo:

Figura 3. Test: aggiorna senza chiudere il browser
Test: aggiorna senza chiudere il browser

Il risultato ci fa capire che l'application server di ASP.NET 2.0 ha rilevato la modifica effettuata sul file e ha ricompilato automaticamente la nostra classe.

Abbiamo visto come avviene la ricompilazione dinamica di una classe posizionata all'interno della cartella speciale App_Code dell'applicazione, c'è da fare però una precisazione.

Tutti i file presenti all'interno della cartella App_Code vengono compilati in un unico assembly e la cartella non può contenere file scritti con linguaggi differenti tra loro come ad esempio C# e VB.NET.

Se abbiamo questo tipo di problema possiamo dividere la cartella App_Code in sottocartelle, ognuna della quali contiene file scritti in un unico linguaggio. Per operare questa partizione in modo completo bisogna dichiararla sul file di configurazione dell'applicazione (Web.config), alla sezione <compilation>.

Listato 3. Web.config: suddivisione di App_Code in sottocartelle

<compilation debug="true">
  <codeSubDirectories>
    <add directoryName="VB"/>
    <add directoryName="CS"/>
  </codeSubDirectories>
</compilation>

Naturalmente bisogna aggiungere le due cartelle all'interno della App_Code, in modo da ottenere:

Figura 4. Sottocartelle in App_Code
Sottocartelle in App_Code

Il nome delle sottocartelle non è importante e può essere scelto a piacere dallo sviluppatore. ASP.NET riconosce il linguaggio con cui sono scritti i file delle sottocartelle ed utilizza il compilatore giusto per compilare il codice sorgente.

Nonostante ci sia la possibilità di implementare un'applicazione utilizzando più di un linguaggio di programmazione, è bene sempre cercare di utilizzarne uno solo, per facilitare il più possibile le operazioni di manutenzione.

L'esempio sviluppato in questo articolo può essere scaricato da qui.

Ti consigliamo anche