C# 使用反射时方法不可用-TargetInError
我已经能够使用反射成功地执行其他方法,但现在我得到了一个C# 使用反射时方法不可用-TargetInError,c#,.net,reflection,C#,.net,Reflection,我已经能够使用反射成功地执行其他方法,但现在我得到了一个TargetInvocationException。尽管targetInvationException将我指向methodInfo.Invoke方法,但单步执行代码显示调用samplexmltodatable时Load方法中发生的异常。SampleXMLToDataTable是与Load在同一类中的公共静态方法。代码试图输入SampleXMLToDataTable时引发错误 从使用反射调用的其他方法中调用方法是否有问题 通过反射调用的代码:
TargetInvocationException
。尽管targetInvationException
将我指向methodInfo.Invoke
方法,但单步执行代码显示调用samplexmltodatable
时Load
方法中发生的异常。SampleXMLToDataTable
是与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);
}
}
从使用反射调用的其他方法中调用方法是否有问题
否,
TargetInvocationException
表示反射成功调用了该方法,但目标方法引发了异常。查看TargetInvocationException
的InnerException
属性,以了解由目标方法引发的异常的详细信息。您的错误只意味着正在调用的方法中的某个位置引发异常。这正是你所指出的。您的SampleXMLToDataTable
方法正在引发异常。这与通过反射调用它无关。我怀疑如果你直接调用它,你会在完全相同的位置得到一个异常
这不是反射的限制,您只是得到了一个不同的异常,因为您是通过反射调用它的,尽管
TargetInvocationException
的内部异常应该提供更多信息。问题已解决:原来SampleXMLToDataTable使用的是一个卸载的程序集。