我有一个在解决方案的另一个项目中使用 IDisposable 的 Web 应用程序(asp.net mvc 4)。这一切都可以从 Visual Studio (2012) 编译并运行良好,但是当使用浏览器运行 Web 应用程序(使用 IIS 8 Express)时会抛出异常。
我使用 IDisposable 的密封类在 using 语句中,并且在到达 using 大括号中的任何代码之前调用 Dispose() 方法,即
using (MySealedClass msc = new MySealedClass())
{
//Code doesn't reach here. Dispose() is called beforehand
//My code here . . .
}
构造函数及其依赖项是:
private readonly IList<IntPtr> _intPtrList;
public MySealedClass()
{
_intPtrList = new List<IntPtr>();
}
所以我认为那里不应该有任何问题。为了测试这一点,我在代码的前面实例化了 MySealedClass,而不使用 using 语句,如下所示:
MySealedClass msc = new MySealedClass()
代码可以通过这一点,然后我可以调用它的方法。
我在 MSDN 上看到了一些示例,其中 using 语句代码被编译器转换为 try catch 模式,但我认为这不能解释错误,因为错误发生在我的主块代码之前。
谁能解释 using 语句是否在做额外的事情?例如,它是否扫描代码块的其余部分,如果有它不喜欢的东西,则调用 Dispose() 方法。
我怀疑 IIS,之前,我有不安全的代码错误(尽管 web.config 中的配置正确),但我忘记让 IIS 以 x64 运行应用程序。使用 regedit 完成后,一切正常。
附加信息:在 using 块中,存在不安全代码和使用 [DllImport] 属性对外部 dll 的调用。
非常感谢