6

我希望有人可以帮助我。我需要从 SPContext 获取当前站点的根网站。使用以下方法很容易完成

SPContext.Current.Site.RootWeb

我对 SPSite 对象位于 SPContext.Current 的想法感到满意。站点.RootWeb 不应该被处理掉,但是我从 SPSite 获得的 SPWeb 对象呢?当 SPSite 被处置时,rootweb SPWeb 会被处置吗?还是我需要自己处理?

4

3 回答 3

6

不应释放对 SPSite.RootWeb 的调用。处置 SPSite 也将处置 RootWeb。

SPDisposeCheck 中有一个错误,如果您确实处置它,它会标记它,如果您不处置它(无论哪种方式都该死!)我在这篇博文中详细说明了我是如何解决这个问题的,因为您不能在提升的权限中使用 SPDisposeCheckIgnore 属性块。

于 2011-06-14T08:39:42.337 回答
4

不,你不应该。您应该只处置您控制的对象。因为上下文是由 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

于 2011-06-13T12:39:23.427 回答
0

您通常应该在 using 子句中使用 SPSite 和 SPWeb。

using (SPSite site = new SPSite("http://mysite.sharepoint.com"))
{
    using (SPWeb web = site.OpenWeb())
    {
        // TODO: code for using SPWeb object
    }
}

这将在您完成后自动正确释放 SPWeb 对象。

于 2011-06-13T11:11:33.887 回答