Sfruttare un assembly da più applicazioni ASP.NET senza utilizzare la GAC

di Cristian Civera, in UserScript, ASP.NET, web.config,

Può capitare di dover creare più applicazioni web per sfruttare più autenticazioni o in generale avere più controllo sulla stessa. Per evitare di duplicare più volte un assembly la miglior soluzione sarebbe quella di usare la GAC. Se non fosse possibile la sezione assemblyBinding permette di specificare il percorso di un assembly:

<configuration>
 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
 <dependentAssembly>
    <assemblyIdentity name="Ora" culture="" />
    <codeBase version="1.0.0.0" href="file:///c:/Inetpub/wwwroot/prove/binding/Ora.dll"/>
 </dependentAssembly>
    </assemblyBinding>
 </runtime>

AssemblyIdentity identifica l'assembly sul quale vogliamo agire. Accetta il culture (la lingua), name (il nome dell'assembly) e publicKeyToken (la chiave pubblica che permette di individuare l'assembly in modo veloce).
Il tag codeBase indica dove è collocato l'assembly. L'attributo href può contenere anche un indirizzo internet, version invece identifica ulteriormente l'assembly per versione.
Bisogna prestare attenzione all'utilizzo di questa funzione.
 Innanzitutto, la sezione runtime va inserita nella cartella principale dell'applicazione web e non in cartelle non dichiarate come applicazioni in IIS (il CLR non segnala alcun errore).
Nel caso l'assembly non abbia uno strong name, dovrà essere collocato nella stessa directory dov'è presente il web.config o in sottocartelle (anche se configurate come applicazioni), per evitare che il CRL segnali un errore.
Inoltre per far sì che il framework, quando elabora la nostra pagina, cerchi un assembly, è necessario referenziare lo stesso.
Normalmente non c'è bisogno perché al primo avvio della nostra pagina, durante la compilazione automatica, gli assemblies da noi utilizzati vengono referenziati automaticamente, cercandoli nelle directory di probing.
Quando utilizziamo il codeBase (codice in linea) questo non succede e perciò dobbiamo aggiungere la direttiva che segue alla nostra pagina:

[code lang="aspx"]<%@ Assembly name="nomeassembly" %>

Questo problema non si verifica quando usiamo il codebehind e referenziamo la DLL in fase di compilazione.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi