0

У меня есть следующий код активации:«Активировать функции»: Ссылка на объект не указывает на экземпляр объекта

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(); 
     } 
    } 

Который должен пройти и добавить новый список под названием проект и связанный с ним вид. Как всегда при запуске приложения я получаю:

«Активировать функции»: Ссылка на объект не указывает на экземпляр объекта

Мои вопросы:

  • Почему это происходит? Активация происходит на уровне . и я являюсь администратором сайта «разработка».
  • Должен ли я проверять каждый раз, чтобы убедиться, что этот список еще не существует? (Каждый раз, имея в виду каждый раз, когда я ударил Deploy)
+0

Какая линия выбрасывает исключение? Это должно быть абсолютно первым, на что вы смотрите, и это должно быть включено в вопрос. –

+0

На самом деле он не говорит, какая строка, это sais Line 0, Collumn 0, CustomerCommunicationProject. @jonSkeet – TheWebs

+0

У вас нет полной трассировки стека? Ик. Можете ли вы пройти через код в отладчике? (Если вы в настоящее время запускаете сборку Release, попробуйте создать сборку Debug, что может дать вам больше информации.) –

ответ

1

Я буду считать, что у вас есть сайт и область видимости функции, что ваш NullReferenceException был вызван вы пытаетесь бросить properties.Feature.Parent as SPWeb.

Если мое предположение о том, что ваша функция является областью действия сайта, верна, вы не можете получить доступ к SPWeb, как вы пытаетесь. Попробуйте это вместо:

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. 
    } 
} 
+0

Могу ли я продолжить использование своего заявления? Я не уверен, что это изменится или нет. – TheWebs

+0

@ TheWebs - вам не нужно удалять корневую сеть, просто удалите сайт (я думаю). – RobH