Cartelle di codice condivise nei siti Web ASP.NET

Aggiornamento: novembre 2007

Se l'applicazione Web in uso include codice da condividere tra più pagine, è possibile conservare il codice in una delle due cartelle speciali secondarie della cartella principale dell'applicazione Web, la cartella Bin e la cartella App_Code. Quando si creano queste cartelle e vi si archiviano particolari tipi di file, ASP.NET gestisce i file in modo speciale.

Nella cartella Bin è possibile memorizzare assembly compilati. Il resto del codice in qualsiasi posizione all'interno dell'applicazione Web (ad esempio, codice relativo alle pagine) farà riferimento a essa. Un caso tipico è quello in cui si dispone del codice compilato per una classe personalizzata. È possibile copiare l'assembly compilato nella cartella Bin dell'applicazione Web. La classe sarà quindi disponibile per tutte le pagine.

Non è necessario registrare gli assembly nella cartella Bin. La presenza di un file DLL nella cartella Bin è sufficiente perché ASP.NET lo riconosca. Se si modifica il file DLL e si scrive una nuova versione del file nella cartella Bin, ASP.NET rileva l'aggiornamento e utilizza la nuova versione del file DLL per le successive richieste della pagina.

Sicurezza e cartella Bin

L'inserimento di assembly compilati nella cartella Bin può rappresentare un problema di sicurezza. Se il codice è stato scritto e compilato dall'utente, le sue funzioni saranno note. Si consiglia tuttavia di gestire il codice compilato nella cartella Bin come qualsiasi altro codice eseguibile. Fare attenzione al codice compilato finché non sia stato verificato e non si sia accertato quali operazioni compie.

Per quanto riguarda la sicurezza dell'inserimento di codice compilato nella cartella Bin, si consideri quanto segue:

  • L'ambito degli assembly nella cartella Bin è l'applicazione corrente. Di conseguenza, essi non possono accedere a risorse o richiamare codice esterno all'applicazione Web corrente.

  • In fase di esecuzione, i livelli di accesso di un assembly sono definiti dal livello di attendibilità specificato nel computer locale. Per ulteriori informazioni, vedere Livelli di attendibilità e file di criteri ASP.NET.

  • Se si sta utilizzando una finestra di progettazione come Visual Studio, il codice nella cartella Bin viene eseguito in un contesto diverso rispetto alla fase di esecuzione. Ad esempio, il codice potrebbe essere in esecuzione con attendibilità totale.

Se si memorizza il codice sorgente nella cartella App_Code, esso verrà compilato automaticamente in fase di esecuzione. L'assembly risultante è accessibile da qualsiasi altro codice nell'applicazione Web. La cartella App_Code di conseguenza funziona in modo molto simile alla cartella Bin, eccettuato il fatto che in essa è possibile memorizzare codice sorgente anziché compilato. La cartella App_Code e il suo speciale status in un'applicazione Web ASP.NET rendono possibile creare classi personalizzate e altri file di solo codice sorgente, per poi utilizzarli nell'applicazione Web senza necessità di compilarli in modo indipendente.

La cartella App_Code può contenere file di codice sorgente creati come file di classe tradizionali, ovvero con estensione vb, cs e così via. Tuttavia, può includere anche file non esplicitamente scritti in un linguaggio di programmazione specifico. Tra gli esempi, file wsdl (Web service description language, linguaggio di descrizione del servizio Web) e file di schema XML con estensione xsd. In ASP.NET è possibile compilare questi file in assembly.

La cartella App_Code può includere qualsiasi numero di file e sottocartelle. È possibile organizzare nel modo desiderato il codice sorgente. ASP.NET compilerà comunque tutto il codice in un unico assembly accessibile al resto del codice in qualsiasi posizione all'interno dell'applicazione Web.

t990ks23.alert_note(it-it,VS.100).gifNota:

Nella cartella App_Code non è possibile inserire controlli utente, inclusi controlli utente per singoli file e controlli utente che utilizzano il modello code-behind. Se si inserisce un controllo utente nella directory App_Code, il codice del controllo utente verrà compilato al di fuori della sequenza obbligatoria e non sarà pertanto consentito. Non è necessario che i controlli utente siano inclusi nella cartella App_Code, sono infatti già disponibili per le pagine in qualsiasi punto dell'applicazione.

Inferenza del linguaggio di programmazione della cartella App_Code

La cartella App_Code non è contrassegnata in modo esplicito come contenente file scritti in un linguaggio di programmazione specifico. Al contrario, ASP.NET deduce il compilatore da richiamare per la cartella App_Code in base ai file in essa contenuti. Se la cartella App_Code contiene file vb, ASP.NET utilizza il compilatore Visual Basic; se include file cs, ASP.NET utilizza il compilatore C#, e così via.

Se la cartella App_Code contiene solo file con linguaggio di programmazione ambiguo, ad esempio un file wsdl, ASP.NET utilizza il compilatore predefinito per le applicazioni Web, come definito nell'elemento compilation dell'applicazione Web o del file di configurazione del computer.

Linguaggi di programmazione diversi nella cartella App_Code

Poiché il codice sorgente nella cartella App_Code viene compilato in un unico assembly, tutti i file nella cartella devono condividere lo stesso linguaggio di programmazione. Ad esempio, la cartella App_Code non può includere codice sorgente in Visual Basic e in C#.

Tuttavia, è possibile configurare l'applicazione Web per gestire le sottocartelle della cartella App_Code come unità compilabili separate. Ogni cartella potrà quindi contenere codice sorgente in un diverso linguaggio di programmazione. La configurazione viene specificata creando un elemento codeSubDirectories nell'elemento compilation del file Web.config e aggiungendo un riferimento alla sottocartella. Nel seguente esempio viene illustrata la configurazione delle sottocartelle denominate VBCode e CSCode da compilare in assembly separati:

<compilation debug="false">
    <codeSubDirectories>
        <add directoryName="VBCode" />
        <add directoryName="CSCode" />
    </codeSubDirectories>
</compilation>

Non è necessario che i riferimenti alle sottocartelle VBCode e CSCode includano informazioni sul linguaggio di programmazione contenuto nella sottocartella. Come per la cartella App_Code, ASP.NET deduce il compilatore da utilizzare dai file contenuti nella sottocartella.

Sicurezza e cartella App_Code

Le problematiche relative alla sicurezza del codice nella cartella App_Code sono essenzialmente identiche a quelle connesse alla cartella Bin, in quanto dipendono dall'esecuzione del codice in un assembly in fase di esecuzione. A ridurre la portata del problema è il fatto che per il file nella cartella App_Code è possibile leggere il codice sorgente. Tuttavia, se non si comprende totalmente il funzionamento del codice, esso può comunque rappresentare un problema di sicurezza. Di conseguenza, si consiglia di gestire il codice sorgente nella cartella App_Code come qualsiasi codice compilato con la stessa origine.

Aggiunte alla community

AGGIUNGI
Mostra: