Попробуйте Catch не работает на BadImageFormatException - PullRequest
3 голосов
/ 06 июня 2011

У меня есть приложение MVC, которое загружает внешнюю DLL, и когда я работаю, я не получаю никакой ошибки. Firefox просто говорит, что соединение было сброшено. Поэтому я вставил в код некоторые try / catch, но они все еще не работают, я все еще получаю сообщение о сбросе соединения.

Я знаю, что это ошибка BadImageFormatException, но почему я ничего не вижу в браузере?

 public class HomeController : Controller
    {

        [DllImport("CDCrypt.dll")]
        [return: MarshalAs(UnmanagedType.LPStr)]
        public static extern String Encrypt([MarshalAs(UnmanagedType.LPStr)] String aName);



        [DllImport("CDCrypt.dll")]
        [return: MarshalAs(UnmanagedType.LPStr)]
        public static extern String Decrypt([MarshalAs(UnmanagedType.LPStr)] String aName);


        //
        // GET: /Home/

        public ActionResult Index()
        {

            try
            {
                ViewBag.EncryptString = Encrypt("test");
            }
            catch (Exception e)
            {
                ViewBag.EncryptString = "Stack Trace\r\n:" + "\r\nException: " + e.Message;
                return new HttpStatusCodeResult(500);
            }
            return View();
        }

        public ActionResult Up()
        {
            ViewBag.Up = "You can see me";
            return View();
        }



    }

Ответы [ 2 ]

5 голосов
/ 06 июня 2011

Кажется, есть некоторые исключения, которые помечены как неисправимые и поэтому не могут быть перехвачены. Этот вопрос (ну этот ответ на самом деле) имеет список их, но я не знаю, насколько это исчерпывающий.

Эта статья содержит дополнительную информацию о неуловимых исключениях и о том, как они могут быть перехвачены, если вы их выбросите, но не если их выдает среда выполнения.

Этот вопрос говорит о том, что выполнение catch вместо catch(Exception ex) также позволит перехватывать исключения COM. Не знаю, поможет ли это (я сомневаюсь в этом), но это интересно и может.

3 голосов
/ 06 июня 2011

http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx

Исключение, которое выдается, когда образ файла библиотеки динамических ссылок (DLL) или исполняемая программа недействительный.

Я скажу это грубо - ваша программа сама не может работать, поэтому нет смысла иметь Try-Catch.

COM-методы сообщают об ошибках, возвращая значения HRESULT; Методы .NET сообщают о них бросать исключения. Время выполнения обрабатывает переход между два.

Здесь вы найдете не очень грубое объяснение того, как отобразить HRESULT и исключения: http://msdn.microsoft.com/en-us/library/9ztbc5s1.aspx

...