Pregunta

Espero que alguien pueda ayudarme.Necesito obtener la web raíz del sitio actual desde SPContext.Se hace fácilmente con lo siguiente

SPContext.Current.Site.RootWeb

Me siento cómodo con la idea de que el objeto SPSite aquí en SPContext.Current. Site .RootWeb no debería eliminarse, pero ¿qué pasa con el objeto SPWeb que obtengo del SPSite?.¿Cuando se elimine el SPSite, se eliminará el rootweb SPWeb?¿O tengo que deshacerme de él yo mismo?

¿Fue útil?

Solución

Las llamadas a SPSite.RootWeb no deben eliminarse.Eliminar el SPSite también eliminará el RootWeb.

Hay un error en SPDisposeCheck donde se marca si lo desecha, y si no lo hace (¡maldita sea!) Expliqué cómo resolví esto en esta publicación de blog , ya que no puede usar un atributo SPDisposeCheckIgnore en bloques de privilegios elevados.

Otros consejos

No, no deberías.Solo debe deshacerse de los objetos que tenga bajo su control.Debido a que el contexto es algo creado por SharePoint, no lo elimina, ya que otros objetos pueden depender de él.

Si creara su propia instancia de un SPWeb a partir de las propiedades de este objeto, debería eliminarlo.Es decir ...

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

Aquí hay un artículo sobre las mejores prácticas para eliminar objetos de SharePoint.

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

Normalmente debería utilizar SPSite y SPWeb en una cláusula using.

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

Esto liberará automáticamente el objeto SPWeb una vez que haya terminado con él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top