Dalla versione 3.0, .NET installa una serie di "assembly di riferimento" diversi in C: \ Programmi \ Reference Files \ Reference .... per supportare profili diversi (ad esempio profilo client .NET 3.5, profilo Silverlight). Ognuno di questi è un assembly .NET corretto che contiene solo metadati - nessun codice IL - e ogni assembly è contrassegnato con lo ReferenceAssemblyAttribute
. I metadati sono limitati a quei tipi e membri disponibili sotto il profilo applicabile - è così che intellisense mostra un insieme limitato di tipi e membri. Gli assembly di riferimento non vengono utilizzati in fase di esecuzione.Come posso creare e utilizzare un "Assembly di riferimento" solo per i metadati .NET?
Ho imparato un po 'a riguardo da this blog post.
Mi piacerebbe creare e utilizzare un tale assieme di riferimento per la mia libreria.
- Come creare un assembly solo per metadati: c'è qualche indicatore del compilatore o un post-processore ildasm?
- Esistono attributi che controllano quali tipi vengono esportati in "profili" diversi?
- Come funziona la risoluzione dell'assembly di riferimento in fase di esecuzione - se avessi l'assembly di riferimento presente nella directory dell'applicazione anziché l'assembly 'reale', e non nel GAC del tutto, il sondaggio continuerà e il mio evento AssemblyResolve verrà attivato in modo che io può fornire l'effettivo assemblaggio in fase di runtime?
Qualsiasi idea o suggerimento su dove potrei saperne di più su questo sarebbe molto apprezzato.
Aggiornamento: Guardando un po 'intorno, vedo il 'assembly di riferimento' .NET 3.0 sembrano avere un certo codice, e il Reference Assembly attribute è stato aggiunto solo in .NET 4.0. Quindi il comportamento potrebbe essere cambiato un po 'con il nuovo runtime.
Perché? Per la libreria del componente aggiuntivo Excel-DNA (http://exceldna.codeplex.com), creo il componente aggiuntivo .xll a file singolo comprimendo gli assi di riferimento nel file .xll come risorse. Gli assembly compressi includono il codice aggiuntivo dell'utente, nonché la libreria gestita da Excel-DNA (a cui potrebbe fare riferimento l'assemblaggio dell'utente).
Sembra piuttosto complicato, ma funziona meravigliosamente bene la maggior parte del tempo - il componente aggiuntivo è un singolo file di piccole dimensioni, quindi nessuna installazione di problemi di distribuzione. Eseguo problemi (non inaspettati) a causa di versioni diverse - se c'è una vecchia versione della libreria gestita da Excel-DNA come file, il runtime caricherà quella invece di quella imballata (non ho mai la possibilità di interferire con il Caricamento in corso).
Spero di creare un assembly di riferimento per la parte gestita da Excel-DNA a cui gli utenti possono fare riferimento durante la compilazione dei componenti aggiuntivi. Ma se hanno erroneamente una versione di questo assembly in fase di runtime, il runtime dovrebbe fallire nel caricarlo e mi dà la possibilità di caricare il vero assembly dalle risorse.
Perché vuoi farlo? – svick