Ho un assembly interamente riempito con classi che implementano interfacce in un altro assembly. Ad esempio:Assemblaggio in fase di ottimizzazione fuori produzione
Main Assembly (Reference to both assemblies)
Shared Assembly
-----IModule
Class Assembly (Reference to shared assembly)
-----unknownType : IModule
-----unknownType2 : IModule
L'assieme Principale non ha alcun riferimento diretto a nessuno dei tipi nell'assieme Classe. Sto cercando per i tipi in questo modo:
// Load all referenced assemblies:
Assembly.GetExecutingAssembly().GetReferencedAssemblies()
.Except(AppDomain.CurrentDomain.GetAssemblies().Select(a => a.GetName()))
.Distinct()
.ToList()
.ForEach(act => Assembly.Load(act));
// Find all instances of IModule in loaded assemblies:
var modules = from asm in AppDomain.CurrentDomain.GetAssemblies()
from provider in asm.GetTypes()
where typeof(IModule).IsAssignableFrom(provider)
...instantiate type etc...
Se ho un riferimento a solo un tipo arbitrario nell'Assemblea classe, poi si presenta in GetReferencedAssemblies, viene caricato e restituito correttamente - ma non appena i rimuove il riferimento al tipo, non viene trasferito alla directory di build o appare come un assembly di riferimento che causa il fallimento del caricamento.
Esiste un modo per forzare VS a includere questo assembly nella directory di output? L'applicazione principale non dovrebbe avere alcuna conoscenza di nessuno dei tipi all'interno dell'assembly di classe.
Mi ricordo di avere un problema simile e l'unica soluzione che ho trovato è stata l'aggiunta di una chiamata fittizia agli assembly di riferimento nel progetto ... –
@KevinD: Poiché l'assembly principale non dovrebbe sapere cosa succede nel assembly di classe, non posso realisticamente aggiungere un riferimento fittizio a meno che non preveda che un assembly type in class sia stato creato appositamente per quello scopo. Il problema è che l'esempio qui è troppo semplificato e così facendo aggiungerebbe complicazioni e fango inutili al design. – caesay
Si tratta di un problema specifico della soluzione o è possibile fornire passaggi per riprodurlo in un contesto arbitrario? – Grx70