我有一个奇怪的问题:我在.aspx页面中使用SPContext.Current.Web,但最后,我得到一个“试图使用已经关闭或处置并且不再有效的SPWeb对象。 “错误信息。
从我看到的,SPContext.Current.Web由某人处置,但我不知道在哪里。我只是想知道:使用Visual Studio 2005的调试器,我能以某种方式看到哪个/谁处置了一个对象?由于我既没有创建也没有源代码,因此设置断点是一个问题。
找出谁将某个特定对象置于何处,而不是随意注释出来的线路,会有什么好方法?
(注意:问题已解决,但问题本身也适用于Sharepoint之外)
答案 0 :(得分:6)
检查这是否有帮助:
如果出现一个对话框,说明当断点被点击时,当前位置没有可用的源代码,请将其解除。
注意:因为我没有安装SharePoint,所以我使用System.IO.StreamReader.Dispose
对此进行了测试,但我猜这也适用于SPContext.Current.Web。请记下这一点。
答案 1 :(得分:0)
在自定义代码中,确保没有获得对Context对象的实际SPWeb对象的引用并将其处理掉。例如,以下内容非常糟糕。
using (SPWeb myWeb = SPContext.Current.Web)
{
// do something
}
这将导致处理SPContext的对象,并且可能不会导致代码出现问题,但可能会在以后引起问题。
答案 2 :(得分:-1)
您应该阅读:http://msdn.microsoft.com/en-us/library/aa973248.aspx
要快点:您应该使用
处理所有SPWeb和SPSiteusing(SPWeb web = ...)
{
....
}
或
SPWeb web = ...
...
web.Dispose()