Home > Articles

Starting Development with SharePoint 2010

📄 Contents

  1. Understanding SharePoint Solutions as Deployment Units
  2. Introducing SharePoint Features
  3. Debugging SharePoint Solutions
  4. Summary
  5. Q&A
In this chapter you begin by writing code in SharePoint 2010 in the form of a console application. After that you learn about SharePoint features and solutions, and then write your first SharePoint feature. Finally you learn about debugging techniques in SharePoint and how they differ from a normal ASP.NET application.
This chapter is from the book

Hour 1, “Introducing SharePoint 2010,” gave you an overview of SharePoint 2010, and Hour 2, “Understanding the SharePoint 2010 Architecture,” looked at SharePoint’s architecture. If you are the typical developer, by now you are probably anxious to write some code. In this hour you begin by writing code in SharePoint 2010 in the form of a console application. After that you learn about SharePoint features and solutions, and then write your first SharePoint feature. Finally you learn about debugging techniques in SharePoint and how they differ from a normal ASP.NET application.

You just wrote your first code and used two important objects of the SharePoint Object model that you will find yourself using almost everywhere. The SPSite represents a SharePoint site collection. The SPWeb represents a site within the site collection. In this case we are accessing the top level site by making a call to the OpenWeb() function of the SPSite. We could have also accessed the top level site by accessing the RootWeb property of the SPSite. However, it was important for you to see the OpenWeb() method and overload that you will be using to access the subsites method as well. Hour 7, “Understanding SharePoint 2010 Server Side Development,” discusses most objects of the SharePoint object model in detail. However, it is helpful to get acquainted with a few of the objects that you will use frequently. You might have observed that SPSite and SPWeb represent the site collection and the site in the SharePoint hierarchy that we looked at in Hour 2. Following are the other objects in the SharePoint hierarchy:

  • SPFarm—This class represents a SharePoint farm and is a part of the Microsoft.SharePoint.Administration namespace. You can access the local farm instance through the SPFarm.Local object.
  • SPWebApplication—This class represents a SharePoint web application and is also a part of the Microsoft.SharePoint.Administration namespace. You can access the WebApplication instance of a site through the WebApplication property of the SPSite class instance.
  • SPContext—This is an important class that represents the context of the request in SharePoint. You can access various important objects of SharePoint like the SPSite and SPWeb instances for the current request through this object. To get access to this object you call SPContext.Current.

You will see as you proceed further in this book that SharePoint provides a rich object model, and you learn about many objects in detail.

Understanding SharePoint Solutions as Deployment Units

Although console applications are a great way to play around with the SharePoint API, you will not be using them to deploy new functionality to SharePoint. The recommended way to deploy functionality is through SharePoint solutions, which are cab files with a .wsp extension, which stands for Windows SharePoint Solution Packages. The most important file in the WSP file is the manifest.xml. This file contains information about the other files in the solution. In SharePoint 2010 you can create two types of solutions: farm solutions and sandboxed solutions.

Understanding Farm Solutions

A farm solution is a SharePoint solution that is deployed to the Solution Store in Central Administration of your SharePoint farm. People who have worked with SharePoint 2007 will find this familiar.

You have now built and deployed your first SharePoint solution. In the preceding output you can see that your HelloWorldVWP feature was activated while deploying. This means that the web part is now available for adding to the pages in the site.

In the preceding scenario we deployed the solution directly through Visual Studio. But we could have just as easily packaged the solution by right-clicking on the project and clicking on Package. We could then deploy the solution using the following stsadm commands.

Stsadm -o addsolution -filename HelloWorldFarm.wsp
Stsadm -o deploysolution -name HelloWorldFarm.wsp -url http://splearn –allowgacdeployment

You can see the contents of the .wsp file generated when you packaged the solution. To view the contents of the .wsp, perform the following steps:

  1. Go to the Bin\Debug folder of your project. Rename HelloWorldFarm.wsp to HelloWorldFarm.wsp.cab.
  2. Open the .cab file and you should see the contents of the solution, as shown in Figure 3.7.
  3. Select the Details view and notice the path column.
    Figure 3.7.

    Figure 3.7. Contents of the WSP file

  4. Open the manifest.xml file. You can see it contains all the information about the contents of the solution, as shown in Figure 3.8.
    Figure 3.8.

    Figure 3.8. Sample manifest.xml

  5. You can also find the SafeControl tag for the web.config file, which is required to allow the web part to run on your site.
  6. Now browse to the <14 Hive>\Template\Features folder and you should see a directory named HelloWorldFarm_HelloWorldVWP. Notice that this maps to the path column in the WSP file. Also go to the <14 Hive>\Template\CONTROLTEMPLATES folder. You can see your HelloWorldFarm folder in there. Notice again that this maps to the path column in your WSP file.

Browse to your SharePoint 2010 Central Administration site. Navigate to System Setting and under Farm Management click Manage Farm Solutions. You should see your solution along with other solutions, as shown in Figure 3.9.

Figure 3.9.

Figure 3.9. Solution Store in the SharePoint 2010 Central Administration

Finally you can see your web part in action. Follow these steps:

  1. Browse to your SharePoint site (in my case it is http://splearn).
  2. Select the Page tab on the ribbon and click Edit. Two new tabs—FormatText and Insert—appear.
  3. Go to the Insert tab and click web part. The list of web parts appears below the tab.
  4. Select Custom under Categories on the left side. You see your HelloWorldVWP web part, as shown in Figure 3.10.
    Figure 3.10.

    Figure 3.10. Insert web part screen

  5. Click Add and the web part is added at the top, as displayed in Figure 3.11.
Figure 3.11.

Figure 3.11. HelloWorldVWP web part added to top zone

One of the most important factors that differentiate a farm solution from a sandboxed solution is that the farm solution is always deployed to your Central Administration Solution Store. Farm solutions can run any type of code without any restrictions. This can be at times counterproductive as there is an increased chance that some code can bring your entire farm down.

Understanding Sandboxed Solutions

Sandboxed solutions are newly introduced in SharePoint 2010. Sandboxed solutions are not deployed to your Central Administration Solution Store like farm solutions. They are deployed to the solutions gallery of your site collection. Also they run with a lot of restrictions compared to farm solutions. In addition sandboxed solutions do not run under the worker process like farm solutions but in a special process known as the Sandboxed Code Service. You can see this service by browsing to SharePoint 2010 Central Administration, System Settings, Manage Services on Server. There you can find the Microsoft SharePoint Foundation Sandboxed Code Service as shown in Figure 3.12. Make sure that this is started.

Figure 3.12.

Figure 3.12. The Manage Service On Server screen in SharePoint 2010 Central Administration

Though we created and deployed simple web parts without much functionality, the steps to create and deploy web parts will be applicable to most of the other things including more complex web parts and other project types in SharePoint. However you need to know when you should create sandboxed solutions and when you should create farm solutions. Sandboxed solutions are the recommended way to go in SharePoint 2010 as they can be monitored more easily and due to restrictions imposed on them cannot cause issues that rogue code in a farm solution might. Sandboxed solutions are an important topic, and Hour 21 is devoted to them. You should go with a farm solution only if you cannot achieve the functionality through a sandboxed solution due to the restrictions imposed on them. Even then various workarounds are available for overcoming the sandboxed solutions’ restrictions as you see later.

Understanding Sandboxed Solutions Restrictions

It is important to know the restrictions imposed on sandboxed solutions if you are to be able to work with them. Following are the SharePoint project items that will not work with a sandboxed solution:

  • Visual web parts
  • Application pages
  • Custom action group
  • HideCustomAction element
  • Content type binding
  • Web application-scoped features
  • Farm-scoped features
  • Workflows with code

Don’t worry if you do not understand all the items listed here. You will come across all these items in subsequent hours. In addition to the previous items, you can access only the following from the SharePoint object model in a sandboxed solution:

  • All of Microsoft.SharePoint, except
    • SPSite constructor
    • SPSecurity
    • SPWorkItem and SPWorkItemCollection
    • SPAlertCollection.Add
    • SPAlertTemplateCollection.Add
    • SPUserSolution and SPUserSolutionCollection
    • SPTransformUtilities
    • Microsoft.SharePoint.Navigation
  • Microsoft.SharePoint.Utilities, except
    • SPUtility.SendEmail
    • SPUtility.GetNTFullNameandEmailFromLogin
  • Microsoft.SharePoint.Workflow
  • Microsoft.SharePoint.WebPartPages, except
    • SPWebPartManager
    • SPWebPartConnection
    • WebPartZone
    • WebPartPage
    • ToolPane
    • ToolPart

In addition to the preceding restrictions the administrator can apply further restrictions to the API. The Microsoft.SharePoint.Administration.SPWebService class provides a collection in the form of the API block list that enables an administrator to specify additional types in the API to block.

InformIT Promotional Mailings & Special Offers

I would like to receive exclusive offers and hear about products from InformIT and its family of brands. I can unsubscribe at any time.


Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030, (Pearson) presents this site to provide information about products and services that can be purchased through this site.

This privacy notice provides an overview of our commitment to privacy and describes how we collect, protect, use and share personal information collected through this site. Please note that other Pearson websites and online products and services have their own separate privacy policies.

Collection and Use of Information

To conduct business and deliver products and services, Pearson collects and uses personal information in several ways in connection with this site, including:

Questions and Inquiries

For inquiries and questions, we collect the inquiry or question, together with name, contact details (email address, phone number and mailing address) and any other additional information voluntarily submitted to us through a Contact Us form or an email. We use this information to address the inquiry and respond to the question.

Online Store

For orders and purchases placed through our online store on this site, we collect order details, name, institution name and address (if applicable), email address, phone number, shipping and billing addresses, credit/debit card information, shipping options and any instructions. We use this information to complete transactions, fulfill orders, communicate with individuals placing orders or visiting the online store, and for related purposes.


Pearson may offer opportunities to provide feedback or participate in surveys, including surveys evaluating Pearson products, services or sites. Participation is voluntary. Pearson collects information requested in the survey questions and uses the information to evaluate, support, maintain and improve products, services or sites, develop new products and services, conduct educational research and for other purposes specified in the survey.

Contests and Drawings

Occasionally, we may sponsor a contest or drawing. Participation is optional. Pearson collects name, contact information and other information specified on the entry form for the contest or drawing to conduct the contest or drawing. Pearson may collect additional personal information from the winners of a contest or drawing in order to award the prize and for tax reporting purposes, as required by law.


If you have elected to receive email newsletters or promotional mailings and special offers but want to unsubscribe, simply email information@informit.com.

Service Announcements

On rare occasions it is necessary to send out a strictly service related announcement. For instance, if our service is temporarily suspended for maintenance we might send users an email. Generally, users may not opt-out of these communications, though they can deactivate their account information. However, these communications are not promotional in nature.

Customer Service

We communicate with users on a regular basis to provide requested services and in regard to issues relating to their account we reply via email or phone in accordance with the users' wishes when a user submits their information through our Contact Us form.

Other Collection and Use of Information

Application and System Logs

Pearson automatically collects log data to help ensure the delivery, availability and security of this site. Log data may include technical information about how a user or visitor connected to this site, such as browser type, type of computer/device, operating system, internet service provider and IP address. We use this information for support purposes and to monitor the health of the site, identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents and appropriately scale computing resources.

Web Analytics

Pearson may use third party web trend analytical services, including Google Analytics, to collect visitor information, such as IP addresses, browser types, referring pages, pages visited and time spent on a particular site. While these analytical services collect and report information on an anonymous basis, they may use cookies to gather web trend information. The information gathered may enable Pearson (but not the third party web trend services) to link information with application and system log data. Pearson uses this information for system administration and to identify problems, improve service, detect unauthorized access and fraudulent activity, prevent and respond to security incidents, appropriately scale computing resources and otherwise support and deliver this site and its services.

Cookies and Related Technologies

This site uses cookies and similar technologies to personalize content, measure traffic patterns, control security, track use and access of information on this site, and provide interest-based messages and advertising. Users can manage and block the use of cookies through their browser. Disabling or blocking certain cookies may limit the functionality of this site.

Do Not Track

This site currently does not respond to Do Not Track signals.


Pearson uses appropriate physical, administrative and technical security measures to protect personal information from unauthorized access, use and disclosure.


This site is not directed to children under the age of 13.


Pearson may send or direct marketing communications to users, provided that

  • Pearson will not use personal information collected or processed as a K-12 school service provider for the purpose of directed or targeted advertising.
  • Such marketing is consistent with applicable law and Pearson's legal obligations.
  • Pearson will not knowingly direct or send marketing communications to an individual who has expressed a preference not to receive marketing.
  • Where required by applicable law, express or implied consent to marketing exists and has not been withdrawn.

Pearson may provide personal information to a third party service provider on a restricted basis to provide marketing solely on behalf of Pearson or an affiliate or customer for whom Pearson is a service provider. Marketing preferences may be changed at any time.

Correcting/Updating Personal Information

If a user's personally identifiable information changes (such as your postal address or email address), we provide a way to correct or update that user's personal data provided to us. This can be done on the Account page. If a user no longer desires our service and desires to delete his or her account, please contact us at customer-service@informit.com and we will process the deletion of a user's account.


Users can always make an informed choice as to whether they should proceed with certain services offered by InformIT. If you choose to remove yourself from our mailing list(s) simply visit the following page and uncheck any communication you no longer want to receive: www.informit.com/u.aspx.

Sale of Personal Information

Pearson does not rent or sell personal information in exchange for any payment of money.

While Pearson does not sell personal information, as defined in Nevada law, Nevada residents may email a request for no sale of their personal information to NevadaDesignatedRequest@pearson.com.

Supplemental Privacy Statement for California Residents

California residents should read our Supplemental privacy statement for California residents in conjunction with this Privacy Notice. The Supplemental privacy statement for California residents explains Pearson's commitment to comply with California law and applies to personal information of California residents collected in connection with this site and the Services.

Sharing and Disclosure

Pearson may disclose personal information, as follows:

  • As required by law.
  • With the consent of the individual (or their parent, if the individual is a minor)
  • In response to a subpoena, court order or legal process, to the extent permitted or required by law
  • To protect the security and safety of individuals, data, assets and systems, consistent with applicable law
  • In connection the sale, joint venture or other transfer of some or all of its company or assets, subject to the provisions of this Privacy Notice
  • To investigate or address actual or suspected fraud or other illegal activities
  • To exercise its legal rights, including enforcement of the Terms of Use for this site or another contract
  • To affiliated Pearson companies and other companies and organizations who perform work for Pearson and are obligated to protect the privacy of personal information consistent with this Privacy Notice
  • To a school, organization, company or government agency, where Pearson collects or processes the personal information in a school setting or on behalf of such organization, company or government agency.


This web site contains links to other sites. Please be aware that we are not responsible for the privacy practices of such other sites. We encourage our users to be aware when they leave our site and to read the privacy statements of each and every web site that collects Personal Information. This privacy statement applies solely to information collected by this web site.

Requests and Contact

Please contact us about this Privacy Notice or if you have any requests or questions relating to the privacy of your personal information.

Changes to this Privacy Notice

We may revise this Privacy Notice through an updated posting. We will identify the effective date of the revision in the posting. Often, updates are made to provide greater clarity or to comply with changes in regulatory requirements. If the updates involve material changes to the collection, protection, use or disclosure of Personal Information, Pearson will provide notice of the change through a conspicuous notice on this site or other appropriate way. Continued use of the site after the effective date of a posted revision evidences acceptance. Please contact us if you have questions or concerns about the Privacy Notice or any objection to any revisions.

Last Update: November 17, 2020