Try Catch无法处理BadImageFormatException

本文关键字:处理 BadImageFormatException Catch Try | 更新日期: 2023-09-27 17:58:33

我有一个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();
        }

    }

Try Catch无法处理BadImageFormatException

似乎有一些异常被标记为不可恢复,因此无法捕获。这个问题(这个答案真的)有一个列表,但我不知道这有多详尽

本文提供了一些关于不可捕获异常的更多信息,以及如果抛出异常而不是运行时抛出异常,如何捕获异常。

这个问题表明,执行catch而不是catch(Exception ex)将允许捕获COM异常。不知道这是否会有帮助(我怀疑),但很有趣,而且可能。

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

当动态链接库的文件映像(DLL)或可执行程序无效的

我会粗略地说——你的程序本身无法运行,所以使用Try-Catch没有意义。

COM方法通过返回HRESULTs。NET方法的报告方式抛出异常。运行时处理二

看看这里,了解一些关于如何映射HRESULT和异常的不那么粗糙的解释:http://msdn.microsoft.com/en-us/library/9ztbc5s1.aspx