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

Posted

技术标签:

【中文标题】使用命令行解析器库获取 TargetInvocationException【英文标题】:Getting TargetInvocationException using Command Line Parser Library 【发布时间】:2011-01-17 08:50:14 【问题描述】:

更新 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

谢谢。

【问题讨论】:

【参考方案1】:

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

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

P.S:你用的是this library,对吧?

【讨论】:

我得到 System.MissingMethodException。我注意到使用调试器,在 CF 版本 MethodInfo 中没有 ReturnParameter 属性。我想这就是问题的根源。 不客气...如果是您对我的答案投了赞成票,那么您最好删除投票,这样当人们搜索未回答的问题时,您的问题就会弹出(也许还有其他人)将能够为您提供真正的帮助):) 太晚了。此外,它很有帮助,所以你值得拥有。【参考方案2】:

该库不是为 Compact-Framework 设计的

【讨论】:

以上是关于使用命令行解析器库获取 TargetInvocationException的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中解析命令行参数/选项

Linux 命令行开关和参数是不是有标准? [关闭]

开放式办公室使用啥 xls 解析器库?

正在尝试构建 xerces c++ 解析器。 Netbeans 和命令行构建错误未定义对“xercesc_3_2 ...”的引用

Python中的RSS提要解析器库[关闭]

Python中的RSS提要解析器库[关闭]