Quando ho provato a convertire tramite tool un web site classico in un WAP non ho potuto fare a meno di notare che tra i vari cambiamenti la cartella speciale App_Code veniva rinominato Old_App_Code... potevo lasciar correre la cosa senza indagare il perchè? Ecco cosa ho scoperto.
Creo una nuova WAP e aggiungo la cartella App_Code. La cartella cambia icona... sembra essere riconosciuta da VS come se fosse una cartella speciale anche se il tipo di progetto prevede una gestione diversa dei sorgenti ora. Aggiungo nella cartella Class1 definita come sotto, poi nella classica "default.aspx" nel codebehind richiamo nella fase di load il metodo "Class1.Foo".
public class Class1
{
public static void Foo()
{
}
}
Avvio il progetto hostando l'applicazione con il default web server: nessuno problema, ma andando a vedere nella cartella temporanea di ASP.NET "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\" non posso fare a meno di notare che è stato creato un assembly che sembra contenere - come sempre avviene per i website di VS2005 - le classi contenute in App_Code...ma attenzione anche il codebehind è stato creato e anche nell'assembly del codebehind è definita Class1.
Due classi con lo stesso full name ma in Assembly diversi ma caricati nello stesso AppDomain... potrebbero nascere problemi?! Seguitemi in questo test. Aggiungo una nuova pagina "Foo.aspx". La pagina non avrà codebehind ma avrà code-inline. Nella pagina aspx implementiamo il page_load e andiamo a richiamare "Class1.Foo". A differenza del primo test ora la pagina verrà compilata on demand quando richiameremo la pagina. Risultato? Eccolo qui sotto :-p
Se ora rinominiamo la cartella, esempio Old_App_Code, la pagina funzionerà senza problemi. Di chi è la colpa? Io ho una mezza idea... ma non me ne preoccupo perchè il problema non è insormontabile e aggirabile senza troppi sforzi; inoltre in fase di pubblicazione verrà creato un solo assembly e tutto funzionerà senza problemi...
posted @ giovedì 16 novembre 2006 00:05