Представьте, что у меня есть решение с некоторыми проектами. В проекте Proj1.BL
У меня есть абстрактный класс MyAbstractClass
, и (сильные требования) Я должен унаследовать его только в других решениях. Все они будут содержать только один класс (например, DerivedClass : MyAbstractClass
), будут иметь ссылки на соответствующие проекты из первого решения (Proj1.BL
, Proj1.DataModel
и т. Д.) И будут скомпилированы в библиотеки DLL (библиотеки классов). И в заключение, эти DLL (еще одно сильное требование) будут храниться в $(OutDir of first solution)\Externals
.ReflectionTypeLoadException при загрузке внешней dll
Мой вопрос: как я должен правильно загрузить эти сборки в рамках первого решения? Я пытался как-нибудь так:
public static Type LoadType(string fileName)
{
if (fileName == null) throw new ArgumentNullException("fileName");
fileName = Path.Combine("Externals", fileName);
if (!File.Exists(fileName)) throw new ApplicationException("File does not exist.");
return
Assembly.LoadFrom(fileName)
.GetTypes()
.SingleOrDefault(_ => _.IsSubclassOf(typeof (MyAbstractClass)));
}
Но я продолжаю получать
ReflectionTypeLoadException. Невозможно загрузить один или несколько запрошенных типов. Получите свойство LoaderExceptions для получения дополнительной информации.
LoaderException
о том CLR не может загрузить тип Proj1.BL.MyAbstractClass
из Proj1.BL, Version=*.*.*.*, Culture=neutral, PublicKeyToken=null
.
Но код, который я запускаю, находится в Proj1.BL
. Что случилось?
Спасибо за любые предложения.