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

project と呼ばれる新しいリストとそれに関連付けられたビューを追加する必要があります。アプリを実行すると、次のようになります。

「フィーチャのアクティブ化」: オブジェクト参照がオブジェクトのインスタンスに設定されていません

私の質問は次のとおりです。

  • なぜこうなった?アクティブ化はサイトレベルで行われます。私は「開発」サイトの管理者です。
  • このリストがまだ存在していないことを毎回確認する必要がありますか? (毎回、デプロイを押すたびに参照)
4

1 に答える 1

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.
    }
}
于 2013-06-04T15:18:19.420 に答える