2009-01-07 9 views
1

J'ai une application qui lance une exception AmbiguousMatchException lorsque j'appelle AppDomain.CreateInstanceAndUnwrap pour instancier un type dans un autre AppDomain. Cela se passe sur l'ordinateur d'un client auquel je n'ai pas directement accès. Je pense que le problème est qu'il y a deux copies du même assemblage chargé. Est-il possible de déterminer si c'est le cas et d'où les deux assemblages sont chargés? L'activation du journal de fusion fournira-t-elle des informations supplémentaires?Débogage d'une exception AmbiguousMatchException levée lors de l'appel de AppDomain.CreateInstanceAndUnwrap dans .NET

Répondre

0

Le journal de fusion peut aider, mais une autre option pourrait être pour accrocher l'événement AssemblyLoad:

AppDomain.CurrentDomain.AssemblyLoad += (s, a) => 
    { 
     Console.WriteLine(a.LoadedAssembly.FullName); 
     Console.WriteLine(a.LoadedAssembly.CodeBase); 
    }; 

Il y a deux causes principales de cette erreur:

  • dénomination pure coïncidence - à savoir Foo.dll et Bar.dll ont tous deux un Some.Namespace.Type type
  • différentes versions (principalement GAC) référencées par différents composants - c'est-à-dire votre DAL charge v2 de certains DLL, et votre UI/code utilitaire charges v4 de la même dll

Bien sûr, une autre option est que vos AppDomain s ont infecté chaque-autre (il est très (trop?) facile à sucer accidentellement une référence sur une limite AppDomain en l'exposant sur l'API de l'objet MarshalByRef).

Questions connexes