J'ai deux assemblys .NET qui sont enregistrés en tant que composants COM + et je les teste à partir d'un harnais de test d'application console standard;Composant COM + appelant d'autres composants COM + - "Impossible de charger le type"
Dim objFirst As New MyFirstComponent() 'COM+ initialisation
Dim RC As Boolean = objFirst.GetValue()
L'appel de méthode est exécuté avec succès. C'est la définition de MyFirstComponent;
<ProgId("MyFirstComponent")> _
<Guid("...")> _
<ClassInterface(ClassInterfaceType.None)> _
<Transaction(TransactionOption.Supported)> _
Public Class MyFirstComponent
Inherits ServicedComponent
Implements IMyFirstComponent
Public Function GetValue() As Boolean Implements IMyFirstComponent.GetValue
Dim objSecond As New MySecondComponent() 'COM+ initialisation
Dim RC As Boolean = objSecond.GetValue()
Return RC
End Function
End Class
Au point où MySecondComponent est initialisés, je reçois un RemotingException avec le message suivant;
Impossible de charger le type 'MySecondComponent', ..., Version = ..., Culture = neutral, PublicKeyToken = ... »
Tous les assemblages sont fortement nommés aussi. Je n'arrive pas à comprendre pourquoi je peux lancer avec succès un appel de méthode au premier composant, mais quand il essaie de charger le deuxième composant lui-même, il ne peut pas résoudre le type. En tant que sidenote, si je cours le code du corps de "GetValue()" dans mon harnais de test, il s'exécute comme prévu. Le problème semble surgir seulement une fois que les choses se sont déplacées dans le domaine des composants COM + appelant d'autres composants COM +.
Mise à jour
Je pense que je suis rétrécissement sur le problème maintenant. Il semble que COM + persistait quelque chose dans le processus, et j'ai dû fermer manuellement les applications COM + à partir de la fenêtre Services de composants avant d'exécuter mon client par rapport à cela. Le problème était que je testais le client chaque fois que je changeais quelque chose (comme ajouter l'assembly au GAC), et pour une raison quelconque, COM + croyait toujours que l'assemblage ne pouvait pas être trouvé. La fermeture de l'application, l'ajout des assemblys requis au GAC et l'exécution du client ont de nouveau fonctionné comme prévu.
Cela a été bon pour mon petit client preuve de concept. Donc je suis retourné à mon vrai code et l'ai essayé, mais maintenant je reçois un autre problème étrange. Mes applications COM + semblent incapables de localiser leurs références de projet normales maintenant. Je ne veux pas vraiment aller dans le sens d'ajouter TOUT ce qu'ils font référence au GAC, donc j'essaie maintenant de comprendre pourquoi mes références normales, non-COM + ne sont pas résolues.
Recherchez l'InnerException. Je suppose qu'il ne peut pas trouver l'assemblage. –
@Hans Passant: Salut Hans - l'InnerException est nul malheureusement. Je suis assez heureux pour croire qu'il ne peut pas trouver l'assemblée, mais je suis déconcerté quant à pourquoi pas. J'ai essayé d'ajouter tout au GAC, mais pas de joie. J'ai également essayé d'enregistrer avec regasm/codebase, mais toujours la même erreur. –
Eh bien, ce n'est pas ça. Aucune idée sans un meilleur message. –