Létrehozási, fordítási és hibakeresési problémák VS 2008 SharePointos projekteknél

Hosszú listát lehet összeírni arról, hogy a SharePoint mi mindenben egyedi. Íme egy újabb tétel a listába: a Visual Studio 2008-ban található SharePointos projekt sablon létrehozás után nem fordul, még ha nem is írunk bele semmit, vagy éppen debug módban nem indítható el.

Először is tisztázzuk, mitől lesznek SharePointos projekt sablonok a Visual Studio 2008-ban: a telepítéskor ki kell választanunk, hogy Office alkalmazásokat is szeretnénk fejleszteni. Ennek hatására két SharePointos projekt típus jelenik meg: SharePoint 2007 Sequential Workflow és SharePoint 2007 State Machine Workflow:

SharePointos projekt típusok Visual Studio 2008-ban

Előfordulhat, hogy hiába kattintunk bármelyikre, a Studio nem képes létrehozni a projektet:

Could not load file or assembly 'Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.

Ezek után még felkínálja a Studio, hogy adminként indítsuk újra, de ettől ne várjunk csodát, ugyanis a hibaüzenetnek nagyon egyszerű oka van: valószínűleg nem telepítettünk a gépünkre SharePointot. Egy újabb ok arra, hogy a SharePointos fejlesztéseinket Windows Serverre telepített SharePoint és helyi Visual Studio környezetben végezzük.

Amikor a projekt típusok közül bármelyiket létrehozzuk és le akarjuk fordítani, az alábbi hibaüzenetekket kapjuk:

Could not resolve this reference. Could not locate the assembly "Microsoft.Office.Workflow.Tasks". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

The type or namespace name 'Office' does not exist in the namespace 'Microsoft' (are you missing an assembly reference?)

Ha jobban megnézzük a Solution Explorer ablakban a References ágat, azt vehetjük észre, hogy négy SharePointos szerelvényre van hivatkozás, melyek közül a Microsoft.Office.Workflow.Tasks nem található:

Solution Explorer: References

Ennek valószínűleg az az oka, hogy WSS-sel dolgozunk, ezt a szerelvényt viszont csak a MOSS tartalmazza. A hibaüzenet megszűntethető, ha eltávolítjuk ezt a szerelvény referenciát. A hivatkozás egyedül azért szerepel itt, mert a Workflow1.cs fájlban megtalálható az alábbi using sor, amit szintén törölhetünk:

using Microsoft.Office.Workflow.Utility;

A projektünk ezek után vígan fordulni fog. Amikor azonban az F5-re bökve debug módban indítanánk, jön egy újabb hibaüzenet, ezúttal nem fordítási, hanem deployment error:

Failed to install the workflow template to Microsoft Office SharePoint Server.

Feature '86d1ee3b-9966-40a0-a16f-c366e8a5f302' could not be installed because the loading of event receiver assembly "Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" failed: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'

Ennek az oka, hogy a feature.xml-ben található hivatkozás a Microsoft.Office.Workflow.Feature szerelvényre, amely szintén csak a MOSS-ban található meg. Bátran töröljük a ReceiverAssembly és a ReceiverClass sorokat és máris menni fog a telepítés:

    <?xml version="1.0" encoding="utf-8" ?>
    <Feature  Id="86d1ee3b-9966-40a0-a16f-c366e8a5f302"
                Title="SharePointWorkflow1 feature"
                Description="My SharePoint Workflow Feature"
                Version="12.0.0.0"
                Scope="Site"
                ReceiverAssembly="Microsoft.Office.Workflow.Feature, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
                ReceiverClass="Microsoft.Office.Workflow.Feature.WorkflowFeatureReceiver"
                xmlns="http://schemas.microsoft.com/sharepoint/">
        <!-- ... -->

A Visual Studio 2008 egyik újdonsága, hogy egy projekt létrehozásakor megadhatjuk a cél .NET Framework verziószámot. A szóban forgó projektek azonban csak akkor jelennek meg, ha a létrehozáskor 3.5-t választunk. Mivel tudjuk, hogy a SharePointnak a .NET 3.0 is elég, ezért a projekt létrehozása után a projekt tulajdonságai között bátran állítsuk át a Target Framework opciót .NET Framework 3.0-ra.

Ezek után megint fordítási hibákat fogunk kapni, aminek megoldásához töröljük a LINQ-es hivatkozásokat. A References ágból töröljük a System.Data.DataSetExtensions és a System.Xml.Linq szerelvényeket, a workflow1.cs fájlból pedig a using System.Linq; sort.



Balássy György (MS RD, ASP.NET MVP, MCTS)

Balássy György (MS RD, ASP.NET MVP, MCTS) Villamosmérnök, a BME Automatizálási és Alkalmazott Informatikai Tanszékén webportálok fejlesztését oktatja. 2000 óta foglalkozik a Microsoft .NET platformjával, melynek meghonosításában jelentős szerepet vállalt előadóként, konzulensként és A .NET Framework és programozása című könyv társszerzőjeként. Az MSDN Kompetencia Központon belül a Portál Technológiák Csoport vezetője, szakterülete web alapú rendszerek fejlesztése és üzemeltetése. 2004-ben Magyarországon elsőként kapta meg a Most Valuable Professional címet, majd 2005 óta a Microsoft magyarországi regionális igazgatója. Publikációi a Technet Magazinban, az MSDN Kompetencia Központ honlapján és szakmai blogjában olvashatóak.

2008.06.15. 12:18:49 | Permalink | Hozzászólások: 0 | Tárgyszavak: , ,


  • AJAX JavaScriptek összefűzése

    Gincsai Gábor Talán kevesen tudják, hogy az AJAXos JavaSriptek összefűzésésére nem csak az ASP.NET 4.0 lesz képes, hanem már jelenleg is, van beépített támogatás rá. Egészen pontosan az ASP.NET 3.5 SP1 óta létezik ez a megoldás. Tovább »
  • Az ASP.NET, a LINQ és a Tranzakció

    Dávid Zoltán LINQ2SQL-t használunk ASP.NET projektben. A LINQ-hez tartozó DataContextet szerettük volna egy olyan változóban tárolni, ami több helyről is elérhető. Erre azért van szükség, mert ha tranzakcióban több műveletet hajtasz végre, akkor tanácsos csak egyetlen DataContext példányt használni (különben elosztott tranzakció indul, annak minden nyűgével). Egy dologra kell ilyenkor figyelni: a DataContext nem állapotmentes, úgyhogy nem szabad felhasználók között passzolgatni. Ebből következik, hogy nem lehet static... Tovább »


Írja meg Ön is véleményét!


Hozzászólásokat csak regisztrált, bejelentkezett felhasználóktól tudunk elfogadni!

Hozzászólások