Попробуйте поймать, не работая на BadImageFormatException

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

Я знаю, что это ошибка 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();
        }



    }

person Jon    schedule 06.06.2011    source источник


Ответы (2)


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

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

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

person Sam Holder    schedule 06.06.2011
comment
Я попытался создать новое исключение в блоке try catch, и все они были пойманы. - person Jon; 06.06.2011
comment
посмотрите мое редактирование - кажется, их можно поймать, если вы их бросите, но не во время выполнения... - person Sam Holder; 06.06.2011
comment
да я особо и не надеялся на это. - person Sam Holder; 06.06.2011
comment
Следующий шаг — попытаться исправить это и иметь возможность загрузить dll stackoverflow.com/q/6254824/84539. - person Jon; 06.06.2011

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

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

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

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

Посмотрите здесь некоторые не столь грубые объяснения того, как отображать HRESULT и Exceptions: http://msdn.microsoft.com/en-us/library/9ztbc5s1.aspx

person manojlds    schedule 06.06.2011
comment
Спасибо, это объяснит - person Jon; 06.06.2011