2015-09-22 3 views
0

Представьте, что у меня есть решение с некоторыми проектами. В проекте 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. Что случилось?

Спасибо за любые предложения.

ответ

0

Эх, ответ был легко, чем ожидалось. Было несоответствие версии, когда Proj1 значения версий сборок были автоматически зафиксированы после каждой перестройки, но DLL ожидала найти Proj1 ассемблерных версий, которые были указаны во время компиляции.

Смежные вопросы