使用反射时不可用的方法 - TargetInvocationError

时间:2011-03-09 15:57:17

标签: c# .net reflection

我已经能够使用反射成功执行其他方法但我现在得到TargetInvocationException。虽然TargetInvoationException将我指向methodInfo.Invoke方法,但逐步执行代码会显示调用LoadSampleXMLToDataTable方法中发生的异常。 SampleXMLToDataTable是与public static在同一类中的Load方法。当代码尝试输入SampleXMLToDataTable时会抛出错误。

使用反射调用其他方法中的方法是否存在问题?

通过反射调用的代码:

 private Object CreateXMLDataLoaderInstance(string xml)
 {
  object o = null;

  Assembly demandAssembly = LoadSampleDemandAssembly();
  Type assemblyType = demandAssembly.GetType("SampleDemand.XMLDataLoader");
  MethodInfo methodInfo = assemblyType.GetMethod("Load");
  o = Activator.CreateInstance(assemblyType, new Object[1] { true });

  Object[] oParamArray2 = new Object[1];

  methodInfo.Invoke(o, new Object[1] { xml });//TargetInvocationException

  return o;
 }

它试图调用的方法:

 public void Load(string xml)
{
  XmlDocument xDoc = new XmlDocument();
  xDoc.LoadXml(xml);

  XmlNode settingsNode = null;
  foreach (XmlNode xNode in xDoc.FirstChild.ChildNodes)
  {
    string name = xNode.Name;
    string wsx = xNode.ChildNodes[0].OuterXml;

    XmlDocument doc = new XmlDocument();
    doc.LoadXml(wsx);
    DataTable dt = SampleXMLToDataTable(doc);//Where the code breaks
    XMLSample xmlWS = new XMLSample(dt, wsx, name);

    this.sample.Add(name, xmlWS);
  }
  if (settingsNode != null)
  {
    settings = GetSettings(settingsNode);
  }
}

2 个答案:

答案 0 :(得分:1)

  

使用反射调用其他方法中的方法是否存在问题?

不,TargetInvocationException表示该方法已被反射成功调用,但目标方法引发了异常。查看InnerException的{​​{1}}属性,了解目标方法引发的异常的详细信息。

答案 1 :(得分:1)

您的错误只是意味着在调用的方法中某处抛出异常。这正是你所指出的。您的SampleXMLToDataTable方法会抛出异常。这与通过反射调用它无关。我怀疑如果你直接调用它,你会在完全相同的位置得到一个例外。

这不是反射的限制,你只是因为你通过反射调用它而得到一个不同的异常,尽管TargetInvocationException的内部异常应该会给你更多的信息。