【问题标题】:How to retrieve the LoaderException property?如何检索 LoaderExceptions 属性?
【发布时间】:2011-06-07 17:08:26
【问题描述】:

我在更新我的服务参考时收到一条错误消息:

自定义工具警告:无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息。

如何检索 LoaderException 属性?

更新:当我重新导入域对象项目时,我的错误消失了。我不知道为什么这解决了这个问题,但我很高兴它正在工作。

【问题讨论】:

  • 你是如何解决这个问题的? “重新导入域对象项目”是什么意思? (删除对项目的引用并重新添加?)

标签: c# .net wcf


【解决方案1】:
try
{
  // load the assembly or type
}
catch (Exception ex)
{
  if (ex is System.Reflection.ReflectionTypeLoadException)
  {
    var typeLoadException = ex as ReflectionTypeLoadException;
    var loaderExceptions  = typeLoadException.LoaderExceptions;
  }
}

【讨论】:

  • 我将您标记为答案,因为我认为这对遇到此警告/错误的其他人最有帮助。
  • 我正在尝试使用此解决方案,但我的 WCF 服务中没有入口点可以实际包装 try 块。
  • 如果它与我的代码有任何关系,这个答案对我有用。我在整个Installer.cs 班级周围放置了一个try...catch,但什么也没有!我的代码在运行时不会抛出这个,只有当我尝试执行安装程序时。有谁知道如何检索 LoaderExceptions 属性以获取更多信息? 例如,浏览到文件夹并查看日志文件?
  • catch 子句将捕获所有异常,但只处理 ReflectionTypeLoadExceptions。像这样的东西会更好。 catch (ReflectionTypeLoadException ex) { var typeLoadException = ex as ReflectionTypeLoadException; var loaderExceptions = typeLoadException.LoaderExceptions; }
  • @ScottMunro:如果您将其视为一种类型,为什么要创建另一个具有相同类型的变量并进行强制转换?这应该足够了:catch (ReflectionTypeLoadException ex) { var loaderExceptions = ex.LoaderExceptions; }。此外,除非您希望强制转换失败并检查 null,否则最好进行直接强制转换,这样它会立即失败,而不是稍后出现 null 引用异常:var typeLoadException = (ReflectionTypeLoadException)ex;
【解决方案2】:
catch (ReflectionTypeLoadException ex)
{        
    foreach (var item in ex.LoaderExceptions)
    {
          MessageBox.Show(item.Message);                    
    }
}

我很抱歉复活了一个旧线程,但我想发布一个不同的解决方案来拉动加载程序异常(使用实际的 ReflectionTypeLoadException),让其他人遇到这个问题。

【讨论】:

  • 仅供参考,如果您正在运行 Win 服务(就像我一样),MessageBox 将不会出现,因为 UI 元素会被自动阻止。其余的实施很有帮助。只是保存到日志文件中。谢谢。
  • “catch 语句缺少它的语句块”。上帝,我讨厌 powershell。
  • 非常感谢,这个解决方案是准确的,因为它指出了确切的问题。捕获异常并什么都不做是没有意义的。
【解决方案3】:

在 Visual Studio 中使用 Quick Watch,您可以从抛出异常的 ViewDetails 中访问 LoaderExceptions,如下所示:

($exception).LoaderExceptions

【讨论】:

  • 谢谢!让我想知道为什么不包含这些信息而不需要访问 LoaderExceptions,因为它实际上包含相关信息。
【解决方案4】:

对于那些正在探索和/或处于交互模式的人的另一种选择:

$Error[0].Exception.LoaderExceptions

注意:[0] 从堆栈中抓取最新的错误

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 2023-03-10
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2021-10-05
    相关资源
    最近更新 更多