Supponiamo di aver creato, sviluppato e compilato con Visual Studio 2008 un nostro progetto per SharePoint 2007 che fa qualcosa (ovviamente non importa cosa).
Distribuendo la nostra soluzione (ad esempio usando WSPBuilder) andiamo a testare il nostro codice e otteniamo un messaggio di errore simile a questo:
Unable to load type 'MyProject.MyCode.MyType'
Il problema è che il codice da voi scritto, e quindi la classe MyType sopra citata, non risulta raggiungibile: in effetti non c'è niente di strano, avete solo compilato un progetto Visual Studio quindi la DLL risultante dalla compilazione è visibile solo a Visual Studio.
Per rendere visibile la DLL a SharePoint ci sono due strade:
- copiare la DLL nella cartella BIN della Web Application associata al sito su cui volete deployare il vostro progetto;
- copiare la DLL nella GAC (Global Assembly Cache), ovvero nella cartella 'C:\Windows\assembly'.
Io preferisco la prima soluzione, la trovo più elegante e più pulita; molti libri, testi, articoli suggeriscono questa pratica per i motivi sopracitati e perché sembra essere una buona pratica rendere disponibile del codice soltanto a chi effetivamente ne ha bisogno (in questo caso alla web application di destinazione).
La maggior parte dei professionisti che lavorano con SharePoint sembrano invece preferire la copia della DLL nella GAC, per diverse ragioni di cui spero di riuscire a trattare in un altro post.
Vediamo allora come procedere. La copia della DLL nella GAC, di per sè, non da molti problemi, è infatti sufficiente prendere la DLL generata dal nostro progetto VS2008 e copiarla nella cartella 'C:\Windows\assembly'. Fermandoci qui però potremmo avere qualche problema, infatti, testando di nuovo la nostra applicazione ci troveremo di nuovo di fronte allo stesso errore:
Unable to load type 'MyProject.MyCode.MyType'
Per risolvere dobbiamo aprire il file web.config della nostra web application ed aggiungere la seguente riga:
nella sezione
/configuration/system.web/compilation/assemblies
insererndo come valore dell'attributo
assembly lo strong name della vostra DLL.