Je suis en train d'appeler une méthode par réflexion avec les paramètres et j'obtiens un "objet ne correspond pas à la cible de type". Si j'invoque une méthode sans paramètres, il fonctionne très bien. Basé sur le code suivant si j'ai appeler la méthode Test("TestNoParameters"), il fonctionne très bien. Cependant si je l'appelle de Test("Run"), j'ai eu une exception. Est quelque chose de mal avec mon code?
Mon but initial était de passer un tableau d'objets (p. ex. public void Run(object[] options) mais cela ne fonctionne pas et j'ai essayé quelque chose de plus simple chaîne de caractères, 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);
}
}
}
}
}