Frage

Ich hoffe, jemand kann mir helfen.Ich muss das Root-Web der aktuellen Site aus dem SPContext abrufen.Mit dem folgenden ist dies ganz einfach

SPContext.Current.Site.RootWeb

Ich bin mit der Idee zufrieden, dass das SPSite-Objekt hier bei SPContext.Current. Site .RootWeb nicht entsorgt werden sollte, aber was ist mit dem SPWeb-Objekt, das ich von der SPSite erhalte.Wird, wenn die SPSite entsorgt wird, das Rootweb SPWeb entsorgt?Oder muss ich es selbst entsorgen?

War es hilfreich?

Lösung

Anrufe an SPSite.RootWeb sollten nicht entsorgt werden.Durch das Entsorgen der SPSite wird auch das RootWeb entsorgt.

Es gibt einen Fehler in SPDisposeCheck, bei dem es angezeigt wird, wenn Sie es entsorgen, und wenn Sie es nicht tun (verdammt noch mal!), habe ich detailliert beschrieben, wie ich dieses Problem gelöst habe. in diesem Blog-Beitrag , da Sie kein SPDisposeCheckIgnore-Attribut in Blöcken mit erhöhten Berechtigungen verwenden können.

Andere Tipps

Nein, solltest du nicht.Sie sollten nur Objekte entsorgen, über die Sie die Kontrolle haben.Da der Kontext von SharePoint erstellt wurde, verfügen Sie nicht über diesen Kontext, da andere Objekte möglicherweise davon abhängig sind.

Wenn Sie aus diesen Objekteigenschaften eine eigene Instanz eines SPWeb erstellen würden, müsste diese entsorgt werden.Das heißt ..

using (SPSite site = new SPSite(SPContext.Current.Site.RootWeb.Url))
using (SPWeb web = site.OpenWeb()) {
 // do something
}

Hier ist ein Artikel über die Best Practices zum Entsorgen von SharePoint-Objekten.

http://msdn.microsoft.com/en-us/library/aa973248(v=office.12).aspx

Normalerweise sollten Sie SPSite und SPWeb in einer using-Klausel verwenden.

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

Dadurch wird das SPWeb-Objekt automatisch korrekt freigegeben, nachdem Sie damit fertig sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top