Ошибка SharePoint: «Невозможно импортировать веб-часть» - PullRequest
11 голосов
/ 23 сентября 2008

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

Однако, когда я упаковал веб-часть, следуя инструкциям на этом веб-сайте в качестве руководства: 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, как ее устранить.

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

Ответы [ 11 ]

8 голосов
/ 23 сентября 2008

Разобрался.

Сообщение об ошибке из файла .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, то проверьте, что ваш тип узла в файле .webpart выглядит примерно так (несвязанный пример):

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

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

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

6 голосов
/ 09 июля 2009

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

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

2 голосов
/ 08 февраля 2012

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

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

1 голос
/ 04 августа 2009

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

Убедитесь, что ваша сборка, пространство имен, имя класса указаны ВЕЗДЕ. Это меня несколько раз вешало.

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

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

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

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

1 голос
/ 16 января 2009

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

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

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

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

Старый код для веб-части 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]; 
        .....
 }

Стоп, я подумал, что это может быть проблема с порядком инициализации веб-страницы. В качестве элемента управления загрузкой веб-страницы, сначала будет запущена функция построения ProjectInfo (). На самом деле, веб-страница еще не завершила свою инициализацию. к тому времени.

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

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 ~~

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

0 голосов
/ 21 ноября 2010

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

namespace MyNamespace
{

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

    }
}
0 голосов
/ 08 ноября 2009

Я обнаружил, что мой не импортировал в первый раз, но если я нажму «Новый» и добавлю его, он будет работать.

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

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

0 голосов
/ 24 марта 2009

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

public class DerivedWebPart : BaseWebPart

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

    public DerivedWebPart() : base()
    {
    }
0 голосов
/ 25 февраля 2009

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

0 голосов
/ 19 января 2009

Решена моя.

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

===========================================================================
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 на Codeplex) и забыл исправить направляющие.

...