У меня есть простой блок кода try-catch-finally, который работает как ожидается в .NET3.5, но тот же код ведет себя совершенно по-другому в проекте, созданном с .NET4.5.1. В принципе, в .NET4.5.1 блок "finally" не попадает, если возникает исключение, которое не является поведением, которое я ожидал от блока try-catch-finally. Я пробовал на разных машинах, и у меня было еще 2 моих коллеги, и мы все получили тот же результат. Это беспокоит меня, потому что я использую блок finally для закрытия DataReaders, определенных подключений и еще чего-то.
.NET4.5.1 не попадает в блок "finally" , если исключение выбрано в режиме RELEASE без отладчика или при запуске файла RELEASE compiled EXE. В режиме отладки обе версии .NET попадают в блок "finally" .
Опять же, приведенный ниже код ведет себя так, как ожидалось, в режиме .NET3.5 RELEASE без отладчика, но не в .NET4.5.1. Я что-то упускаю? Может кто-нибудь помочь?
class Program
{
static void Main(string[] args)
{
try
{
string a = null;
var x = a.Length;
Console.WriteLine(x);
}
catch (Exception ex)
{
throw;
}
finally
{
Console.WriteLine("This is the finally block.");
}
Console.WriteLine("You should not be here if an exception occured!");
}
}