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();
}
}
似乎有一些异常被标记为不可恢复,因此无法捕获。这个问题(这个答案真的)有一个列表,但我不知道这有多详尽
本文提供了一些关于不可捕获异常的更多信息,以及如果抛出异常而不是运行时抛出异常,如何捕获异常。
这个问题表明,执行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