C# 控制台应用程序崩溃,未执行全局try-catch和UnhandledException
我有一个控制台应用程序,如下所示C# 控制台应用程序崩溃,未执行全局try-catch和UnhandledException,c#,.net,dapper,C#,.net,Dapper,我有一个控制台应用程序,如下所示 static void Main(string[] args) { try { System.AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; // My Code } catch(Exception ex) { } } static void UnhandledExceptionTr
static void Main(string[] args)
{
try
{
System.AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;
// My Code
}
catch(Exception ex)
{
}
}
static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
{
// The code.
}
在上面的代码中,catch既没有触发,也没有未处理的ExceptionTrapper。它突然说应用程序停止工作了。事件查看器没有关于崩溃的重要信息。事件查看器显示某些文件存在,但当检查无任何内容时。我正在使用.NET4.6.1
代码只是从oracle(使用dapper)和TransactionScope提取数据
编辑:我们找到了罪魁祸首。它在Oracle中进行更新,并将其包装在TransactionScope中。问题在于,无法捕获这些异常,有时会出现异常,但大多数情况下会失败。这些是使用Dapper更新Oracle的示例代码
using (var scope = new TransactionScope())
{
UpdateOracleUsingDapperMethod();
scope.Complete();
}
相关:我们发现问题与
OLEDB连接相关。因此,我们转向了OracleConnection
,没有崩溃。这意味着在Dapper中将Oracle与TransactionScope
和OLEDB连接一起使用会出现一些严重问题。这可能与非托管库有关。。。您正在使用吗?不,我正在使用Dapper和Transaction Scope。在Main()方法运行和订阅事件之前,需要执行一系列操作。即时编译器需要首先运行,它很容易因FileNotFoundException而失败。在发布版本中更糟糕的是,现在它需要尝试内联方法调用,因此需要JIT更多的代码。任何带有字段初始值设定项的静态变量都是值得注意的,它们很可能在Main()开始执行之前运行并结束。通过将//mycode
块中的代码移动到另一个静态方法中,使其变得更好。它需要[MethodImpl(MethodImplOptions.NoInLine])来减缓抖动。@HansPassant我可以调试前几行代码,但在它崩溃之后,一些异常非常糟糕,无法处理并触发failfast。就像这个网站的名字一样。查看“输出”窗口中的进程退出代码。有些是可以报告的,看看。相关的