2009-10-15 4 views
0

Вот ситуация: Я использую ILMerge слить сборочной & все это ссылки в 1 .dll файл с помощью this method (custom.dll). У меня есть приложение, которое динамически загружает эту сборку во время выполнения (program.exe). В обоих приложениях & сборка использует общую библиотеку (common.dll). Абстрактный класс ClassX определен в common.dll, а реализация ClassY определена в custom.dll. Когда program.exe пытается загрузить ClassY с custom.dll, он выдает исключение:C# ILMerge Невозможно привести объект типа «классным» для типа «» ClassX

Невозможно наложить объект типа «ClassY» на тип «ClassX».

Код такой, но foo динамически загружен, а не просто новый класс ClassY();

object foo = new ClassY(); 
ClassX bar = (ClassX)foo; 

У кого-нибудь есть идеи, почему это будет сделано? ClassY определенно реализует ClassX, все версии сборки/библиотеки точно такие же.

ответ

1

Все DLL должны быть отмечены COM видимыми. Без этого компилятор не смог решить разные типы сборок - даже они называются одинаковыми.

0

Вы проверили внутреннее исключение? Возможно, так как ваш ClassY динамически загружается, когда при выполнении броска он пытается загрузить одну из предварительно объединенных сборок. Внутреннее исключение было бы «Невозможно скомпилировать сборку» {вы предварительно собрали имя сборки}.