При развертывании пользовательской веб-части возникает ошибка «Не удается импортировать эту веб-часть» - PullRequest
0 голосов
/ 10 мая 2011

Я создал пустой проект SharePoint в Visual Studio 2010 с некоторыми пользовательскими веб-частями. Когда я проверил их на своей локальной машине разработки, их можно было без проблем добавить на страницу.

Когда я развертываю wsp через PowerShell на удаленном сервере SharePoint, веб-части отображаются в галерее веб-частей, но при добавлении одной к странице появляется сообщение об ошибке «Не удается импортировать эту веб-часть». В журналах нет дополнительной информации. Согласно некоторым ответам, которые я нашел через Google, я проверил, нет ли кода в Init. Вся начальная обработка выполняется внутри CreateChildControls (хотя я бы подумал, что если бы это было причиной, я бы получил ту же ошибку на моем локальном компьютере).

Первоначально я задал этот вопрос по адресу https://sharepoint.stackexchange.com/questions/11820/custom-web-part-deployment-produces-cannot-import-this-webpart-error. Из полученных предложений я решил создать новый проект, в котором я выполнил минимальное кодирование.

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

using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;

namespace TestWebParts.TestHelloWorld
{
    [ToolboxItemAttribute(false)]
    public class TestHelloWorld : WebPart
    {
        protected override void CreateChildControls()
        {
            Label lblThis = new Label();
            lblThis.Text = "Testing web part";
            Controls.Add(lblThis);
        }
    }
}

Файл .webpart в проекте

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <type name="TestWebParts.TestHelloWorld.TestHelloWorld, $SharePoint.Project.AssemblyFullName$" />
      <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">TestHelloWorld</property>
        <property name="Description" type="string">My WebPart</property>
      </properties>
    </data>
  </webPart>
</webParts>

Я проверил, что была добавлена ​​безопасная запись управления. Я добавил политики CAS в проект (так как они будут развернуты в корзине, а не в GAC). Манифест пакета выглядит следующим образом

<?xml version="1.0" encoding="utf-8"?>
<Solution xmlns="http://schemas.microsoft.com/sharepoint/">
  <CodeAccessSecurity>
    <PolicyItem>
      <PermissionSet class="NamedPermissionSet" version="1" Description="Permission set for ECB">
        <IPermission class="AspNetHostingPermission" version="1" Level="Minimal" />
        <IPermission class="SecurityPermission" version="1" Flags="Execution,ControlPrincipal,ControlAppDomain,ControlDomainPolicy,ControlEvidence,ControlThread" />
        <IPermission class="Microsoft.SharePoint.Security.SharePointPermission, Microsoft.SharePoint.Security, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"
    version="1" ObjectModel="True" />
        <IPermission class="System.Security.Permissions.EnvironmentPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Read="UserName" />
        <IPermission class="System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" PathDiscovery="*AllFiles*" />
        <IPermission class="System.Security.Permissions.ReflectionPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" version="1" Unrestricted="true" PathDiscovery="*AllFiles*" />
      </PermissionSet>
      <Assemblies>
        <Assembly Name="$SharePoint.Project.AssemblyName$" Vers7ion="$SharePoint.Project.AssemblyVersion$" PublicKeyBlob="$SharePoint.Project.AssemblyPublicKeyBlob$"/>
      </Assemblies>
    </PolicyItem>
  </CodeAccessSecurity>
</Solution>

.wsp отлично работает на компьютере разработчика, на котором я пытаюсь запустить его. Когда я пытаюсь просмотреть веб-часть в Галерее веб-частей, появляется сообщение «Невозможно импортировать эту веб-часть», как показано выше. Я подтвердил, что .dll находится в каталоге bin. Файл web.config содержит эту запись

          <SafeControl Assembly="TestWebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8d63a878e7c304c2" Namespace="TestWebParts.TestHelloWorld" TypeName="*" Safe="True" SafeAgainstScript="True" />

При просмотре веб-части xml из галереи веб-частей отображается

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <type name="TestWebParts.TestHelloWorld.TestHelloWorld, TestWebParts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=8d63a878e7c304c2" />
      <importErrorMessage>Cannot import this Web Part.</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">TestHelloWorld</property>
        <property name="Description" type="string">My WebPart</property>
      </properties>
    </data>
  </webPart>
</webParts>

У кого-нибудь есть идеи относительно того, что может вызвать проблему при развертывании на компьютере разработчика? Единственное, о чем я могу думать, это то, что мой локальный компьютер - Windows 7, а компьютер разработчика - Windows Server 2008. Оба работают под управлением SharePoint Foundation

1 Ответ

0 голосов
/ 10 мая 2011

Не удается найти сборку, на которую есть ссылка в веб-части.Ошибка, которую вы видите, на самом деле является эквивлантом из этой строки кода.

Невозможно импортировать эту веб-часть.

Что вам нужно сделать, это проверить полные имена классов и ссылок на сборки в файле определения .webpart и обновить соответствующим образом.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...