Je suis en train d'appeler une méthode par réflexion avec des paramètres et je reçois:Réflexion: Comment Invoke Méthode avec des paramètres
objetne correspond pas au type cible
Si j'invoque une méthode sans paramètres, ça fonctionne bien. Basé sur le code suivant si j'appelle la méthode Test("TestNoParameters")
, cela fonctionne très bien. Cependant si j'appelle Test("Run")
, j'obtiens une exception. Quelque chose ne va pas avec mon code?
Mon but initial était de faire passer un tableau d'objets, par ex. public void Run(object[] options)
mais cela n'a pas fonctionné et j'ai essayé quelque chose de plus simple, par ex. chaîne sans succès.
// Assembly1.dll
namespace TestAssembly
{
public class Main
{
public void Run(string parameters)
{
// Do something...
}
public void TestNoParameters()
{
// Do something...
}
}
}
// Executing Assembly.exe
public class TestReflection
{
public void Test(string methodName)
{
Assembly assembly = Assembly.LoadFile("...Assembly1.dll");
Type type = assembly.GetType("TestAssembly.Main");
if (type != null)
{
MethodInfo methodInfo = type.GetMethod(methodName);
if (methodInfo != null)
{
object result = null;
ParameterInfo[] parameters = methodInfo.GetParameters();
object classInstance = Activator.CreateInstance(type, null);
if (parameters.Length == 0)
{
// This works fine
result = methodInfo.Invoke(classInstance, null);
}
else
{
object[] parametersArray = new object[] { "Hello" };
// The invoke does NOT work;
// it throws "Object does not match target type"
result = methodInfo.Invoke(methodInfo, parametersArray);
}
}
}
}
}
C'est ce que nous sommes là pour;) – womp
Cela fonctionne, sauf lorsque vous travaillez avec une instance d'un assemblage à distance. Le problème était que cela renvoyait à la même erreur qui n'est pas très utile. J'ai passé plusieurs heures à essayer de le réparer, et posté une nouvelle solution générale à la fois pour mon cas et celui fourni ici. Au cas où quelqu'un en aurait besoin :) –
Si les paramètres sont de types multiples, à quoi devrait ressembler le tableau? un tableau d'objets ?? –