- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
简介
当用户在 NLog 配置中创建错误(如无效的 XML)时,我们 (NLog) 会抛出一个 NLogConfigurationException
。异常包含错误的描述。
但有时如果对 NLog 的第一次调用来自静态字段/属性,则此 NLogConfigurationException
会被 System.TypeInitializationException
“吃掉”。
示例
例如如果用户有这个程序:
using System;
using System.Collections.Generic;
using System.Linq;
using NLog;
namespace TypeInitializationExceptionTest
{
class Program
{
//this throws a NLogConfigurationException because of bad config. (like invalid XML)
private static Logger logger = LogManager.GetCurrentClassLogger();
static void Main()
{
Console.WriteLine("Press any key");
Console.ReadLine();
}
}
}
并且配置中存在错误,NLog 抛出:
throw new NLogConfigurationException("Exception occurred when loading configuration from " + fileName, exception);
但是用户会看到:
“将异常详细信息复制到剪贴板”:
System.TypeInitializationException was unhandled Message: An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll Additional information: The type initializer for 'TypeInitializationExceptionTest.Program' threw an exception.
所以消息没了!
问题
TypeInitializationException
发送更多信息吗?喜欢留言?我们已经发送了一个 innerException。 Exception
是否有属性以便报告更多信息? 注意事项
编辑:
请注意,我是库的维护者,而不是库的用户。 我无法更改调用代码!
最佳答案
我只会指出您在这里处理的潜在问题。您正在与调试器中的错误作斗争,它有一个非常简单的解决方法。使用工具 > 选项 > 调试 > 常规 > 勾选“使用托管兼容模式”复选框。还要取消勾选“仅我的代码”以获得信息最丰富的调试报告:
如果勾选“仅我的代码”,则异常报告的信息量较少,但仍可通过单击“查看详细信息”链接轻松深入了解。
选项名称不必要地含糊不清。它真正所做的是告诉 Visual Studio 使用旧版本的调试引擎。任何使用 VS2013 或 VS2015 的人都会遇到新引擎的问题,可能是 VS2012。这也是之前 NLog 中没有解决这个问题的基本原因。
虽然这是一个很好的解决方法,但并不容易发现。程序员也不会特别喜欢使用旧引擎,旧引擎不支持返回值调试和 64 位代码的 E+C 等 Shiny 的新功能。很难猜测这是新引擎中的一个真正的错误、疏忽还是技术限制。这太丑陋了,所以不要犹豫,将其标记为“错误”,我强烈建议您将其带到 connect.microsoft.com。当它得到修复时,每个人都会领先,我记得至少有一次为此挠头。通过使用 Debug > Windows > Exceptions > 当时打勾的 CLR Exceptions 来深入研究。
这种非常不幸的行为的解决方法肯定是丑陋的。您必须延迟引发异常,直到程序执行进展到足够远为止。我不太了解你的代码库,但延迟解析配置直到第一个日志命令应该处理它。或者存储异常对象并在第一个日志命令中抛出它,可能更容易。
关于c# - 更好的 TypeInitializationException(innerException 也为 null),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994470/
我正在使用 C# 语言的 opennlp 工具。我编写了以下代码: string modelpath = @"D:\models\en-sent.bin"; java.io.FileInputStre
我有一个静态类。 static class AppDirectory { public static string PACSTEMP = Path.Combine(Path.GetTempPa
我最近将 mono 更新到了最新版本 4.0.2,从那时起,Monodevelop 将无法启动。 我尝试清除与 mono 和 monodevelop 相关的所有软件包 单一完整 单运行时 单开发 我记
我找到了一段代码,可以使用 objectARX 命令在 autocad 中打开一个 dwg 文件。当我在类库项目中编写这段代码时,它可以成功运行,但是当我想将这段代码放在我的 Windows 应用程序
这个问题在这里已经有了答案: What is a NullReferenceException, and how do I fix it? (27 个答案) 关闭 7 年前。 在运行此代码时,我在第
我正在编写测试以测试 Infopath Forms 在 Form Control 中打开,我的测试方法如下 [TestMethod] public void Validate_OpenInfopath
错误日志: System.TypeInitializationException was unhandled Message="The type initializer for 'MaxDavid
来自静态构造函数的异常被包装在 TypeInitializationException 中。考虑下面的例子 using System; namespace ConsoleApp { class Pro
MS Visual Studio 2005 抛出这条消息是什么意思? "The type initializer for 'RMDC.clsVariables' threw an exception.
我正在 ASP.NET MVC 5 C# 中制作应用程序。尝试从 web.config 文件访问连接字符串元素时出现异常。 An exception of type 'System.TypeIniti
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我有一个带有多个功能区的 Excel 插件,一个功能区是设置窗口。单击它时,将显示一个自定义窗口。但是,单击时不会显示任何内容。我在日志文件中看到以下异常。是什么原因造成的,如何解决?非常感谢 201
我在公共(public)类上有一个静态方法。示例: public class MyClass { public static bool Test() { return true; } } 我从另一个
我正在尝试使用 aleagpu,但我得到了 System.TypeInitializationException。我试图用谷歌搜索问题所在,但找不到任何解决方案,所以请帮忙。该程序尽可能简单: cla
我有一个程序集(.Net 3.5 中的类库项目),它有一些引用,例如 System.Configuration 和 System.Web。我在 Web 应用程序上使用它并且运行良好。 现在,我需要引用
我有一个 VS2015 解决方案,其中包含一个服务层,该服务层公开一组 WCF 服务,以及一个使用它们的 WPF 客户端。我已经配置了 log4net 并且在服务层工作正常 我现在想在客户端使用log
我正在开发一个用 F# 编写的 WebApi 项目。这里有一个片段: module MyModule open System let MyGuid = Guid.Parse "934F0B12-D00
我在使用 NodaTime 时遇到 TypeInitializationException,但仅限于 Release 且仅限于设备。 这是堆栈跟踪: System.TypeInitialization
我正在尝试使用 OpenSsl.net,但我收到了 TypeInitializationException,这让我很困惑。设置是: 我有一个控制台应用程序,它有一个对 openssl.net 的项目引
我开发了一个使用 NLog 的 WPF 应用程序。它已部署到一些潜在客户,在其中一个中,该应用程序在一周内运行良好,但现在甚至打不开。也就是说,您双击应用程序图标,实际上什么也没有发生。甚至 AppD
我是一名优秀的程序员,十分优秀!