Опитайте Catch Not Working на 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 методите отчитат грешки, като връщат HRESULTs; .NET методите ги отчитат чрез хвърляне на изключения. Времето за изпълнение управлява прехода между двете.

Погледнете тук за някои не толкова груби обяснения как да картографирате HRESULTs и изключения: http://msdn.microsoft.com/en-us/library/9ztbc5s1.aspx

person manojlds    schedule 06.06.2011
comment
Благодаря ви, това ще го обясни - person Jon; 06.06.2011