2009-10-15 7 views
0

Voici la situation: J'utilise ILMerge pour fusionner un ensemble & toutes ses références dans 1 fichier .dll à l'aide this method (custom.dll). J'ai une application qui charge dynamiquement cet assembly à l'exécution (program.exe). Les deux ensembles d'application & utilisent une bibliothèque commune (common.dll). La classe abstraite ClassX est définie dans common.dll tandis que la mise en œuvre ClassY est définie dans custom.dll. Lorsque program.exe tente de charger ClassY à partir de custom.dll, il lance l'exception:C# ILMerge Impossible de jeter l'objet de type « Classy » taper « ClassX »

Impossible de convertir un objet de type 'ClassY' en type 'ClassX'.

Le code est comme ceci, mais foo est chargé dynamiquement plutôt qu'un simple nouveau ClassY();

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

Quelqu'un a-t-il une idée de pourquoi il ferait cela? ClassY implémente définitivement ClassX, toutes les versions d'assemblage/bibliothèque sont exactement les mêmes.

Répondre

1

Toutes les DLL doivent être marquées COM visible Sans cela, le compilateur n'a pas pu résoudre différents types d'assemblage - même ils portent le même nom:

0

Avez-vous vérifié l'exception interne? Il est possible que, puisque votre ClassY est chargé dynamiquement, lorsque vous faites le cast, il essaie de charger l'un des assemblages pré-fusionnés. L'exception interne serait "Impossible d'assembler fin '{vous êtes le nom d'assembly pré-fusionné}'

Questions connexes