Я запускаю приложение WCF CoreApplication
, проект VS которого имеет ссылку на AncillaryProject
.CoreApplication
использует класс Provider
из AncillaryProject
;однако на него никогда не ссылаются явно - он вызывается через Reflection.
Моя проблема в том, что иногда CoreApplication
не удается найти Provider
, поскольку AncillaryProject
не появляется в вызоведо GetAssemblies()
.Иногда это работает нормально, но иногда (я предполагаю, что это может быть после JIT), это терпит неудачу.
Вот мой оригинальный код:
var providers = from d in AppDomain.CurrentDomain.GetAssemblies()
from c in d.GetTypes()
where typeof(BaseProvider).IsAssignableFrom(c)
select c;
После просмотра этого вопроса, я пытался использовать GetReferencedAssemblies()
:
var allAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
allAssemblies = allAssemblies.Union(
a.GetReferencedAssemblies()
.Select(b => System.Reflection.Assembly.Load(b)));
}
var providers = from d in allAssemblies
from c in d.GetTypes()
where typeof(BaseProvider).IsAssignableFrom(c)
select c;
Я понимаю, что вопрос, на который я ссылался, решает проблему путем динамической загрузки всех файлов DLL в каталоге bin, но это не очень хорошомне. Есть ли лучший способ сделать это , или .NET просто не загружает другие сборки вообще? Как это работает под капотом , и я могу что-нибудь с этим поделать?