我希望有人可以帮助我。我需要从 SPContext 获取当前站点的根网站。使用以下方法很容易完成
SPContext.Current.Site.RootWeb
我对 SPSite 对象位于 SPContext.Current 的想法感到满意。站点.RootWeb 不应该被处理掉,但是我从 SPSite 获得的 SPWeb 对象呢?当 SPSite 被处置时,rootweb SPWeb 会被处置吗?还是我需要自己处理?
我希望有人可以帮助我。我需要从 SPContext 获取当前站点的根网站。使用以下方法很容易完成
SPContext.Current.Site.RootWeb
我对 SPSite 对象位于 SPContext.Current 的想法感到满意。站点.RootWeb 不应该被处理掉,但是我从 SPSite 获得的 SPWeb 对象呢?当 SPSite 被处置时,rootweb SPWeb 会被处置吗?还是我需要自己处理?
不应释放对 SPSite.RootWeb 的调用。处置 SPSite 也将处置 RootWeb。
SPDisposeCheck 中有一个错误,如果您确实处置它,它会标记它,如果您不处置它(无论哪种方式都该死!)我在这篇博文中详细说明了我是如何解决这个问题的,因为您不能在提升的权限中使用 SPDisposeCheckIgnore 属性块。
不,你不应该。您应该只处置您控制的对象。因为上下文是由 SharePoint 创建的,所以您不会处理它,因为其他对象可能依赖于它。
如果您要从此对象属性创建自己的 SPWeb 实例,则需要将其释放。IE。
using (SPSite site = new SPSite(SPContext.Current.Site.RootWeb.Url))
using (SPWeb web = site.OpenWeb()) {
// do something
}
这是一篇关于处置 SharePoint 对象的最佳实践的文章。
http://msdn.microsoft.com/en-us/library/aa973248(v=office.12).aspx
您通常应该在 using 子句中使用 SPSite 和 SPWeb。
using (SPSite site = new SPSite("http://mysite.sharepoint.com"))
{
using (SPWeb web = site.OpenWeb())
{
// TODO: code for using SPWeb object
}
}
这将在您完成后自动正确释放 SPWeb 对象。