Mam zestaw całkowicie wypełniony klasami implementującymi interfejsy w innym złożeniu. Na przykład:Montaż jest zoptymalizowany z budowy
Main Assembly (Reference to both assemblies)
Shared Assembly
-----IModule
Class Assembly (Reference to shared assembly)
-----unknownType : IModule
-----unknownType2 : IModule
Zestaw główny nie ma bezpośredniego odniesienia do żadnego z typów w zespole klasy. Szukam typów tak:
// 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...
Jeśli mam odniesienie do tylko dowolnego typu w Zgromadzeniu klasy, to pojawia się w GetReferencedAssemblies, zostanie załadowany i wrócił poprawnie - ale jak tylko usuń odwołanie do typu, nie zostanie ono przesłane do katalogu budowania lub pojawi się jako zbiór odwołania, co spowoduje niepowodzenie ładowania.
Czy jest jakiś sposób zmusić VS do włączenia tego zestawu w katalogu wyjściowego? Główna aplikacja nie powinna mieć żadnej wiedzy na temat żadnego z typów w klasie.
Pamiętam, że miałem podobny problem, a jedynym rozwiązaniem, jakie znalazłem, było dodanie fałszywego wywołania do referencyjnych zestawów w projekcie ... –
@KevinD: Ponieważ główny zespół nie powinien wiedzieć, co się dzieje w klasy klasy, nie mogę realistycznie dodać fikcyjnego odwołania, chyba że założę, że typ w zespole klasy został stworzony specjalnie do tego celu. Problem polega na tym, że powyższy przykład jest zbyt uproszczony, co spowodowałoby niepotrzebne komplikacje i błoto w projekcie. – caesay
Czy jest to kwestia specyficzna dla danego rozwiązania, czy też możesz podać kroki, aby ją odtworzyć w dowolnym kontekście? – Grx70