Blog di LucaB

audio, video, disco

Compilare le classi di un progetto Web Application (dov'è finita l'App_Code?)

Da un po' di tempo sto provando ad utilizzare i Web Application Project di Visual Studio 2005 per la realizzazione di siti web. Ci sono, a mio avviso, diversi vantaggi in questo approccio, ad esempio la possibilità di gestire diversi file di configurazione. Però con l'uso sto scoprendo anche diverse "scomodità", almeno finché non si impara come fare.

Un problema che mi ha portato via un bel po' di tempo è stato la scomparsa dell'App_Code. Nei progetti Web Application non esiste la directory App_Code, ossia quella directory speciale, introdotta con ASP.NET 2.0 in cui basta mettere il codice sorgente delle nostre classi per trovarsele condivise per tutta l'applicazione. In pratica è come referenziare un assembly, solo che qui l'assembly è generato a runtime.

Poiché avevo la necessità di condividere delle classi tra le pagine di una mia applicazione web, ho testardamente provato ad aggiungere al progetto una cartella denominata App_Code. Ovviamente non compariva tra le voci di "Add ASP.NET Folder", ma una volta aggiunta (come cartella qualsiasi, dandole il nome "App_Code"), è stata visualizzata con l'icona tipica della cartella ASP.NET.

Ho quindi aggiunto le mie classi in questa cartella, ma anche dopo aver compilato, queste non erano condivise, l'intellisense di Visual Studio non le vedeva e forzandone l'uso nelle pagine, il compilatore dava errore.

Dopo un bel po' di ricerche su Internet, e di prove seguendo consigli sbagliati trovati in rete del tipo "metti le classi in App_GlobalResource" (stavolta stranamente non ho trovato nessuno che abbia dato la colpa a Vista Wink), finalmente sono arrivato alla banalissima soluzione:

è sufficiente mettere le classi che andrebbero nella cartella App_Code in una normale cartella[1] ed assicurarsi che ciascuno dei file delle classi (.vb o .cs) abbia impostato nelle proprietà, alla voce "Build Action", il valore "Compile" e non "Content", che sembra quello predefinito.

Magari l'avessi saputo prima...


[1] dovrebbe andare bene anche la cartella App_Code, che in un Web Application Project ha lo stesso valore di una cartella qualsiasi, però io non rischierei (anche se con piccole prove sembrava funzionare normalmente)

View blog reactions

Posted: Jan 06 2008, 03:03 PM by lucab | with no comments
Filed under: ,