Ошибка SharePoint: "Невозможно импортировать веб-часть"

У меня есть веб-часть, которую я разработал, и если я вручную установил веб-часть, это нормально.

Однако, когда я упаковал веб-часть, следуя инструкциям на этом веб-сайте в качестве руководства: http://www.theartofsharepoint.com/2007/05/how-to-build-solution-pack-wsp.html

Я получаю эту ошибку в файлах журнала:

09/23/2008 14:13:03.67  w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       8l4d    Monitorable Error importing WebPart. Cannot import Project Filter.   
09/23/2008 14:13:03.67  w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       89ku    High        Failed to add webpart http%253A%252F%252Fuk64p12%252FPWA%252F%255Fcatalogs%252Fwp%252FProjectFilter%252Ewebpart;Project%2520Filter.  Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import Project Filter.     at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(...  
09/23/2008 14:13:03.67* w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       89ku    High        ...String eventArgument)     

Соответствующий бит:

http%253A%252F%252Fuk64p12%252FPWA%252F%255Fcatalogs%252Fwp%252FProjectFilter%252Ewebpart;Project%2520Filter.
Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import Project Filter.
at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)
at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)
at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)
at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)

И это сопровождается довольно кратким сообщением об ошибке: "Невозможно импортировать веб-часть".

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

Все, кажется, на месте, но я получаю эту ошибку и небольшое объяснение от SharePoint о том, как ее разрешить.

Любая помощь в поиске решения оценивается.

Ответ 1

Выяснил это.

Сообщение об ошибке - это сообщение из файла .webpart:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <!--
      The following Guid is used as a reference to the web part class, 
      and it will be automatically replaced with actual type name at deployment time.
      -->
      <type name="7F8C4D34-6311-4f22-87B4-A221FA8735BA" />
      <importErrorMessage>Cannot import Project Filter.</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">Project Filter</property>
        <property name="Description" type="string">Provides a list of Projects that can be used to Filter other Web Parts.</property>
      </properties>
    </data>
  </webPart>
</webParts>

Проблема заключается в том, что исходный файл .webpart был создан в 32-разрядной системе с установленными расширениями Visual Studio для WSS.

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

Замена GUID с полным именем типа работает.

Итак, если вы столкнулись с сообщением об ошибке из вашего importErrorMessage node, тогда проверьте, что ваш тип node в .webpart файле выглядит более похожим на этот (несвязанный пример):

<type name="TitleWP.TitleWP, TitleWP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" />

Это в формате: Класс, пространство имен, версия, культура, PublicKey

Вы можете легко извлечь это из файла web.config, связанного с вашим экземпляром SharePoint, так как он будет в списке безопасных элементов управления.

Ответ 2

У нас была эта же проблема и выяснилось, что конструктор нашей веб-части вызывается WebPartImporter и внутри конструктора, в котором мы выполняли SPSecurity.RunWithElevatedPrivileges.

По какой-то причине WebPartImporter не может справиться с этим. Итак, мы просто переместили наш код из конструктора в OnInit (где он действительно принадлежал), и все хорошо.

Ответ 3

Все замечательные предложения. Моя проблема была уникальной и глупой: я применил решение к первому веб-приложению, но не ко второму. Однако SharePoint все же разрешил мне активировать эту функцию во второй веб-сайте сайта (не уверен, почему). Это означало, что у второго веб-приложения не было безопасного элемента управления в этом файле Web.config(и я глупо проверял первый Web.config).

Итак, дважды проверьте, что вы смотрите на правильное веб-приложение/web.config.

Ответ 4

Теперь я получаю ответ на аналогичную проблему, как показано ниже:

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

Итак, я попытался добавить некоторые веб-части ohter на странице, странный внешний вид quesiton, некоторые из них могут быть добавлены, некоторые из них не могут быть добавлены.

После того как я проследил код моей веб-части и anaylsis, я нашел причину:

Старый код для веб-части ProjectInfo (мое название веб-части):

namespace ProjectInfo
....
 public class ProjectInfo:System.Web.UI.WebControls.WebParts.Web.part
 {
        .....
        private SPWeb _spWeb;
        private SPList _spList;
        private string _listName = "ProjectDocs";
        ......
 }
public ProjectInfo()
 {
        .....
            _spWeb = SPContext.Current.Web;
            //It show me a error here when i trace the code
            _spList = _spWeb.Lists[_listName]; 
        .....
 }

Остановитесь сейчас, я подумал, что это может быть проблема с порядковым порядком веб-страницы. Управление веб-страницей веб-страницы AS, функция createrue ProjectInfo() будет запущена вначале. Фактически, веб-страница не завершила свой init. к тому времени.

поэтому я сделал тест. во-первых, я положил хорошую страницу на странице, это нормально. затем я пытаюсь поместить веб-часть на страницу, которую нельзя добавить только сейчас. ~~ ОК!! Он работает... потому что страница уже инициализирована. закончил.

Ok! Я исправил свой код:

   namespace ProjectInfo
    ....
     public class ProjectInfo:System.Web.UI.WebControls.WebParts.Web.part
     {
            .....
            private SPWeb _spWeb;
            private SPList _spList;
            private string _listName = "ProjectDocs";
            ......
     }
    public ProjectInfo()
     {
            .....
                //Remove code in constructure function.
                //_spWeb = SPContext.Current.Web;
                //It show me a error here when i trace the code
                //_spList = _spWeb.Lists[_listName]; 
            .....
     }

   protected override void CreateChildControls()
        {
         ....
           base.CreateChildControls();

            _spWeb = SPContext.Current.Web;
            _spList = _spWeb.Lists[_listName];
          ....
         }

После тестирования сообщение об ошибке снова не произошло. LoL ~~

Надеюсь, это объяснение поможет вам.

Ответ 5

Я видел эту аномалию несколько раз без хорошего разрешения.

Убедитесь, что ваше Сборочное, Пространство имен, Имя класса верны ВЕСЬ. Это повесило меня не один раз.

Убедитесь, что у вас есть действительная запись SafeControls.

Убедитесь, что ваш .webpart файл действителен (пусть SharePoint создает его для вас, если вы можете)

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

Это сработало для меня. Удачи.

Ответ 6

Вы переработали свой рабочий процесс или reset IIS?

Ответ 7

Решил шахту.

я получал эту ошибку:

===========================================================================
Error importing WebPart. Cannot import ........ Web Part.
Failed to add webpart 
Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import ... Web Part.     at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)   
===========================================================================

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

Проблема заключалась в следующем: несогласованные GUIDS

Проверьте, соответствуют ли guid в классе webpart, а также в .xml и в .webpart классе.

Я скопировал код из других источников веб-страниц. (Mutliple Document Upload Wepart on Codeplex) и забыл исправить подсказки.

Ответ 8

Я также испытал эту ошибку, когда сборки в GAC, на которые ссылалась моя веб-часть, были подписаны другим сильным ключевым файлом с именем, который я ожидал. Я нашел это при принятии решения об обновлении этих DLL. При вставке в GAC я заметил, что для одной DLL было 2 записи, но у них были разные токены открытого ключа

Ответ 9

Я получил эту ошибку, когда создал веб-часть базового класса, а затем унаследовал от нее производный класс. Базовый класс был прав, но производный класс не удался, когда я попытался добавить его на веб-страницу с той же ошибкой, что и исходная запись. В моем случае мне пришлось добавить в класс модификатор public:

public class DerivedWebPart : BaseWebPart

Также я добавил конструктор в производном классе, чтобы вызвать базовый класс один, хотя я думаю, что вам это не нужно:

    public DerivedWebPart() : base()
    {
    }

Ответ 10

Я обнаружил, что мой не импортировал в первый раз, но если бы я нажал "Создать" и добавил его, это сработает.

Оттуда я схватил копию XML и сохранил ее в своем проекте. После этого веб-часть отлично работала.

Мне потребовались только ДНИ, чтобы дойти до этого. Очень много времени.

Ответ 11

У меня была проблема, очень похожая на эту проблему, но Гиды не были проблемой: у моего веб-части не было атрибута CLSCompliannt, установленного на false. Например:

namespace MyNamespace
{

    [CLSCompliant(false)]
    [Guid("...")]
    public class MyWidget : MyWebPartBaseClass
    {

    }
}