尝试捕获BadImageFormatException时无效

4
我有一个MVC应用程序,它加载了一个外部的DLL文件。在生产环境中,我根本没有收到任何错误信息。火狐浏览器只是显示连接被重置。所以我在代码中加入了一些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个回答

6

似乎存在一些被标记为无法恢复的异常,因此无法被捕获。这个问题(确切地说是这个答案)列出了它们的一些,但我不知道这是否穷尽了所有情况。

这篇文章提供了有关无法捕获异常及其如何在抛出时被捕获的更多信息,但如果运行时抛出异常,则无法捕获。

这个问题说,使用catch而不是catch(Exception ex)也可以捕获COM异常。我不知道这是否有用(我怀疑),但很有趣,也许会有所帮助。


我尝试在try catch块中抛出一个新的异常,但它们都被捕获了。 - Jon
1
看起来如果你抛出异常,你可以捕获它们,但是如果运行时处理异常,则无法捕获。 - Sam Holder
是的,我对此并没有抱太大希望。 - Sam Holder
1
下一步是尝试修复它并能够实际加载dll。http://stackoverflow.com/q/6254824/84539 - Jon

3

谢谢,那会解释清楚的。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接