代码之家  ›  专栏  ›  技术社区  ›  Shaihi

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

  •  3
  • Shaihi  · 技术社区  · 14 年前

    更新2: 似乎这个库根本就不了解紧凑的框架,我一直在得到其他的例外情况——我把这个问题保持原样,但我认为您不应该浪费时间来回答它。
    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;
    }
    

    我正在接受TargetInvocationException on help.AddOptions(this) . 追踪是:

    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。

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

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

    也作为下面答案的答案 InnerException 给予 MissingMethodException

    谢谢。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Paolo Tedesco    14 年前

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

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

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

        2
  •  0
  •   Shaihi    14 年前

    库不是为紧凑框架设计的