使用命令行分析器库获取TargetInvocationException

时间:2010-02-16 11:33:36

标签: c# .net-3.5 compact-framework

更新2: 似乎这个库根本不是Compact-Framework,我不断得到其他例外 - 我将这个问题保留原样,但我认为你不应该浪费时间来回答它。
opened another question建议其他紧凑框架友好的库。


使用Command Line Parser Library

我使用以下代码来定义命令行参数:

[Option("d", "duration", Required = true,  HelpText = "text.")]
public int duration = DEFAULT_TEST_DURATION;

[Option("s", "sleeptime", HelpText = "text.")]
public int sleepTime = DEFAULT_TEST_SLEEP;

[Option("p", "pause", HelpText = "text.")]
public int iterInterval = DEFAULT_TEST_INTERVAL;

[Option(null, "nosync", HelpText = "text.")]
public bool nosync = false;

[Option(null, "nosuspend", HelpText = "text.")]
public bool nosuspend = false;

[Option(null, "reboot", HelpText = "text.")]
public bool reboot = false;

[HelpOption(HelpText = "Dispaly this help screen.")]
public string GetUsage()
{
    HelpText help = new HelpText("MyExe");
    help.AddPreOptionsLine("Usage: MyExe -d 500 -s 20 -p 10 --nosync");
    help.AdditionalNewLineAfterOption = true;
    help.AddOptions(this);
    return help;
}

我在help.AddOptions(this)上收到了TargetInvocationException。跟踪是:

System.Reflection.TargetInvocationException was unhandled
  Message="TargetInvocationException"
  StackTrace:
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean verifyAccess, StackCrawlMark& stackMark)

如果需要其他的请注释,我会发布。

我在MethodInfo的文档中找不到它会抛出此异常,因此我无法理解为什么会得到它。 我使用的方法与库的样本相同,我在示例应用程序中没有异常。

我想原因在于我正在为智能设备编译它。可能与CF3.5中的支持有关,但我不确定。

使用VS2008。

更新 我应该提到样本在完整框架上运行,而我的应用程序在紧凑版本上运行。

我注意到CF3.5中的MethodInfo没有ReturnParameter属性,而不是完整的框架版本。

同样作为下面答案的答案,InnerException给出了MissingMethodException

感谢。

2 个答案:

答案 0 :(得分:1)

InnerException属性应该为您提供更多详细信息:

try{
    help.AddOptions(this);
} catch (TargetInvocationException e) {
    Console.WriteLine(e.InnerException);
}

P.S:您正在使用this library,对吧?

答案 1 :(得分:0)

该库不是为Compact-Framework设计的