'Activate Features': Object reference not set to an instance of an object

1.9k views Asked by At

I have the following activation code:

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        // Create a new list and populate it.
        using (SPWeb web = properties.Feature.Parent as SPWeb)
        {
            web.Lists.Add("Projects", "Projects That are currently being worked on.", SPListTemplateType.GenericList);
            web.Update();

            // Add the new list and the new content.
            SPList projectList = web.Lists["Projects"];
            projectList.Fields.Add("Name", SPFieldType.Text, false);
            projectList.Fields.Add("Description", SPFieldType.Text, false);
            projectList.Update();

            //Create the view? - Possibly remove me.
            System.Collections.Specialized.StringCollection stringCollection = 
                new System.Collections.Specialized.StringCollection();
            stringCollection.Add("Name");
            stringCollection.Add("Description");

            //Add the list.
            projectList.Views.Add("Project Summary", stringCollection, @"", 100, 
                true, true, Microsoft.SharePoint.SPViewCollection.SPViewType.Html, false);
            projectList.Update();
        }
    }

Which should go through and add a new list called project and its associated view. How ever when running the app I get:

'Activate Features': Object reference not set to an instance of an object

My questions are:

  • Why is this happening? The activation happens at a site level. and I am the admin of the "development" site.
  • Should I be checking each time to make sure this list doesn't already exist? (each time, referring to each time I hit deploy)
1

There are 1 answers

2
RobH On BEST ANSWER

I'm going to assume that you have a Site scoped feature and that your NullReferenceException is being caused by you attempting to cast properties.Feature.Parent as SPWeb.

If my assumption about your feature being Site scoped is correct you can't get access to an SPWeb the way you are trying. Try this instead:

public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
    SPSite siteCollection = properties.Feature.Parent as SPSite;
    if (siteCollection != null) 
    {
        SPWeb web = siteCollection.RootWeb;
        // Rest of your code here.
    }
}