W SharePoint 2007 problemu żadnego nie było, tworzyliśmy projekt, dodawaliśmy referencję, tworzyliśmy kod i F5. Z Visual Studio 2010 i SharePoint 2010 jest trochę inaczej :)

VS 2010 domyślnie tworzy projekty w .NET Framework 4.0, zaś SharePoint 2010 korzysta z .NET Framework 3.5 (dziwne czemu nie z 4.0… czy oni zawsze muszą być o technologię do tyłu?), więc już przy tworzeniu projektu, musimy wybrać odpowiedni target framework:

console_err0

Jeżeli tego nie zrobimy nie będziemy mogli dodać biblioteki Microsoft.SharePoint.dll z zakładki .NET w oknie Add Reference (po prostu ta biblioteka tam widnieć nie będzie):

console_err

Jak już dodamy referencję napiszmy sobie kodzik wyświetlający nazwy wszystkich list:

using System;
using Microsoft.SharePoint;

namespace TestSpsConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            using(var siteCollection = new SPSite("http://em10"))
            {
                var web = siteCollection.OpenWeb();
                var listCollection = web.Lists;

                foreach(SPList list in listCollection)
                {
                    Console.WriteLine(list.Title);
                }
            }

            Console.ReadLine();
        }
    }
}

Zauważcie, że SPWeb już nie jest w using, przy dispose od SPSite, SPWeb zostanie usunięty (uwaga, linki prowadzą do dokumentacji z WSS 3.0) :)

Jak uruchomimy taki kod, dostaniemy następujący, mało mówiący wyjątek:

console_err1

The Web application at http://em10 could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application.

Spędziłem nad nim trochę czasu i już chciałem rezygnować, kiedy zobaczyłem iż target platform ustawiony domyślnie jest na x86:

console_err6

Jak wiadomo, SharePoint 2010 występuje jedynie w wersji 64 bitowej. Więc miałem dwie możliwość, w ustawieniach projektu, zmienić target platform na 64 bitowy:

console_err5

Co nie zmienia poprzedniego rysunku (tam wciąż jest wyświetlane x86, zaś kompilacja idzie na x64, co może być mylące… dość bardzo), lub mogłem stworzyć nowy target platform:

console_err2

console_err3

console_err4

Po dodaniu i ustawieniu go na Any CPU kod działa już poprawnie.