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:
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):
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:
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:
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:
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:
Po dodaniu i ustawieniu go na Any CPU kod działa już poprawnie.