我有一个正在加载外部DLL的MVC应用程序,在生产中我根本没有错误。 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();
}
}
答案 0 :(得分:5)
似乎有一些例外被标记为不可恢复,因此无法捕获。 This question(好this answer)有一个列表,但我不知道这是多么详尽。
This article有一些关于无法捕获的异常的更多信息,以及如果抛出它们它们如何被捕获但是如果运行时抛出它们则不会被捕获。
This question表示,执行catch
而不是catch(Exception ex)
将允许捕获COM异常。不知道这是否会有所帮助(我对此表示怀疑),但这很有意思,而且可能。
答案 1 :(得分:3)
http://msdn.microsoft.com/en-us/library/system.badimageformatexception.aspx
当抛出异常时 动态链接库的文件图像 (DLL)或可执行程序是 无效。
我会粗暴地说 - 你的程序本身无法运行,所以没有使用Try-Catch的意义。
COM方法通过返回报告错误 的HRESULT; .NET方法报告它们 抛出异常。运行时 处理之间的过渡 2。
请看这里有关如何绘制HRESULT和例外的一些不那么粗略的解释:http://msdn.microsoft.com/en-us/library/9ztbc5s1.aspx