Pregunta

Estoy tratando de escribir una aplicación de consola que simplemente enumere la cantidad de listas en la raíz del punto compartido.

Intenté hacerlo usando el siguiente código, pero el objeto SPContext.Current es nulo. ¿Alguna idea de cómo obtener el objeto web?

 SPWeb web = SPContext.Current.Site.OpenWeb("http://localhost") ;
¿Fue útil?

Solución

SPSite spSite = new SPSite("http://myurl");
SPWeb spMySite = spSite.Allwebs["mysite"];
SPWeb spRootsite = spsite.RootWeb;

La aplicación de consola solo se ejecutará en el servidor como de costumbre. Además, la url utilizada http: // myurl puede ser una url a una página y se creará un objeto SPSite. P.ej. http: //myurl/mysite/pages/default.aspx obtendrá un objeto SPSite válido.

Otros consejos

Solo agrego una pequeña cosa a la publicación de Nat:
Incluso si no es tan importante como en una aplicación web de SharePoint, se recomienda eliminar todos los objetos SPWeb y SPSite.
Así que mantén buenos hábitos:

using (SPSite site = new SPSite(weburl))
{
    using (SPWeb web = site.OpenWeb())
    {
        // bla bla
    }
}

Nota: puede pasar directamente el weburl al constructor SPSite, por lo que OpenWeb abrirá la web dada.

Hay un par de otras formas en que puede usar SPSite.OpenWeb () también ...

Si realiza un seguimiento del GUID del objeto SPWeb:

site.OpenWeb(webUid);

Utilizando el servidor de una web o la URL o título relativo del sitio, consulte MSDN SPSite. OpenWeb (string) para más detalles:

site.OpenWeb(relativeUrl);
site.OpenWeb(title);

Usando la URL relativa precisa y evitando cualquier cosa inteligente que utilice SPSite.OpenWeb (string):

site.OpenWeb(relativeUrl, true);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top