Ambigu match trouvé lors de l'accès dll
Je suis en train de charger une fonction dans une dll. La dll est chargée, mais juste à la place de l'invocation de la fonction, j'obtiens une exception
Ambigu match trouvé
Voici l'extrait de code.
Assembly dll = Assembly.LoadFrom(DLLPATH);
if (dll != null)
{
Type Tp = dll.GetType("ABCD.FooClass");
if (Tp != null)
{
Object obj = Activator.CreateInstance(Tp);
if (obj != null)
{
List = (List<String>)obj.GetType().GetMethod("Foo").Invoke(obj, null);
}
else
{
Console.WriteLine("obj is null");
}
}
Console.WriteLine("Type is null");
}
else
Console.WriteLine("Dll is not loaded");
Console.ReadKey();
La méthode que j'appelle (j'.e Foo
), n'accepte pas les paramètres et c'est une méthode surchargée. C'est que l'endroit où je vais mal ou est-il un autre endroit?
Est-il une autre façon d'invoquer de telles méthodes qui n'accepte pas les paramètres? J'ai essayé la solution posté ici mais ça ne fonctionne pas.
Exemple de code sans tous LoadLibrary/CreateInstance serait susceptible d'apparaître problème plus clairement s'il vous plaît essayer de faire simple échantillon avec simplifiée "FooClass" et l'appel à l'Invoquer. (en supposant que vous obtenez exception).
Ne vous chargez de l'assemblée à plusieurs reprises?
Je suis le chargement de l'assemblée pour un temps seulement.
Ne vous chargez de l'assemblée à plusieurs reprises?
Je suis le chargement de l'assemblée pour un temps seulement.
OriginalL'auteur Pankaj Kolhe | 2013-03-06
Vous devez vous connecter pour publier un commentaire.
La méthode
Type.GetMethod(string methodName)
lève l'exception que vous avez mentionné si il n'y a plus d'une méthode portant le nom spécifié ( voir cette rubrique MSDN ). CommeFoo
est une surcharge comme vous le dites, je soupçonne qu'il y a de multiplesFoo
méthodes dans la même DLL. Si vous avez par exemple les méthodes :La méthode
GetMethod(string methodName)
ne permet pas de déterminer celui qui vous voulez avoir. Dans ce cas, vous devez utiliser la méthodeGetMethods
et de déterminer la bonne méthode sur votre propre.OriginalL'auteur Tobias
Si il y a une surcharge et que vous voulez appeler la méthode sans paramètres c'est la bonne solution:
OriginalL'auteur lupok
Merci les gars pour votre aide.!!
Comme je vous l'ai dit, la méthode (j'.e TOTO) qui, je l'appelle, est surchargé. Je n'ai pas utilisé GetMethod() correctement, je suppose. Maintenant, j'ai trouvé une solution en utilisant GetMethods() fonction.
J'ai changé mon code de la manière suivante et cela a fonctionné.!!
OriginalL'auteur Pankaj Kolhe
Grâce.
Mon Ambiguë "match found" est que j'avais une zone de texte dans la ASCX(frontend) nommé Bio, un élément de données nommée Bio dans une liste <%# DataBinder.Eval(Récipient.DataItem, "Bio")%>, et j'ai nommé une variable de chaîne Bio .CS.
Pas de construire des erreurs ou des "redlines", mais a généré une erreur à l'exécution. J'ai renommé les variables différemment et l'erreur a disparu. Le prgrammer qui a écrit le code ne suivent pas les conventions de nommage comme BioTxt. Ce serait éliminé l'erreur.
OriginalL'auteur WebPro