Ocorreu um erro na etapa de implantação 'Ativar recursos':Referência de objeto não definida para uma instância de um objeto:erro do receptor de recursos

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/109937

Pergunta

Criei uma web part Visual em SP 2013.Precisa de uma lista do SharePoint.Então escrevi o código abaixo no receptor de recursos da web part.Quando implanto a solução, recebo um erro dizendo Ocorreu um erro na etapa de implantação 'Ativar recursos':Referência de objeto não definida para uma instância de um objeto.Eu configurei ActivateOnDefault="FALSE" e AlwaysForceInstall="TRUE" .Dê uma olhada no meu arquivo de manifesto de recursos.

<Feature xmlns="http://schemas.microsoft.com/sharepoint/" Title="SharePointProject1 Feature1" ActivateOnDefault="FALSE" AlwaysForceInstall="TRUE" Id="8f7163d5-6c65-40d8-9045-8f74192f07d7" ReceiverAssembly="SharePointProject1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9c2f0c3a8e22f6a0" ReceiverClass="SharePointProject1.Features.Feature1.Feature1EventReceiver" Scope="Site">
  <ElementManifests>
    <ElementManifest Location="VisualWebPart1\Elements.xml" />
    <ElementFile Location="VisualWebPart1\VisualWebPart1.webpart" />
  </ElementManifests>
</Feature>

Este é o meu código Feature1EventReceiver.

SPWeb spWeb = properties.Feature.Parent as SPWeb;
            SPList laptopList = spWeb.Lists["Laptops"];
            if (laptopList != null)
            {
                laptopList.Delete();

            }
            SPListCollection lists = spWeb.Lists;
            lists.Add("Laptops", "The Laptops", SPListTemplateType.GenericList);
            laptopList = spWeb.Lists["Laptops"];


            laptopList.Fields.Add("Name", SPFieldType.Text, true);
            laptopList.Fields.Add("Model", SPFieldType.Text, true);
            laptopList.Fields.Add("Image", SPFieldType.URL, false);

Posso implantar se tiver apenas o código abaixo

 SPWeb spWeb = properties.Feature.Parent as SPWeb;
Foi útil?

Solução

A web part visual deve ser incluída no recurso com escopo do site, como resultado, properties.Feature.Parent é um objeto SPSite.Você precisa verificar o escopo do recurso e usar o código abaixo se o escopo for site.

SPSite site = properties.Feature.Parent as SPSite;
if (site != null){
    SPWeb web = site.RootWeb;
    SPList laptopList = web.Lists["Laptops"];
    ...
}

Outras dicas

web.lists[] causará uma exceção se a lista não estiver lá.

usar TryGetList em vez de

Trabalhou para mim depois de mudar o nível de escopo de recursos de Site para Rede

enter image description here

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top