Ошибка 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 о том, как ее исправить.

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


person Community    schedule 23.09.2008    source источник


Ответы (11)


Догадаться.

Это сообщение об ошибке из файла .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, так как он будет в списке безопасных элементов управления.

person Community    schedule 23.09.2008

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

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

person Kirk Liemohn    schedule 09.07.2009
comment
Этот ответ - палочка-выручалочка! Я столкнулся с той же проблемой с веб-частью, которой я дал System.Net.WebPermission. Я добавил атрибут [System.Net.WebPermission (System.Security.Permissions.SecurityAction.Demand, Unrestricted = true)] к классу в целом, а не к конкретному методу, которому требовалось разрешение. - person ngm; 15.04.2011

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

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

person PeterX    schedule 08.02.2012

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

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

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

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

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

Остановитесь сейчас, я подумал, что это может быть проблема с порядком инициализации веб-страницы. В качестве элемента управления загрузкой веб-страницы сначала будет запущена функция constructrue 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()
     {
            .....
                //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 ~~

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

person Smxyhd    schedule 16.01.2009

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

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

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

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

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

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

person Community    schedule 04.08.2009

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

person Keith Sirmons    schedule 23.09.2008
comment
Я попробую. Я не знал. - person ; 23.09.2008

Решил шахту.

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

===========================================================================
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)   
===========================================================================

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

Проблема заключалась в следующем: несовпадающие идентификаторы GUID

Проверьте, совпадают ли guid в классе webpart и в классах .xml и .webpart.

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

person Community    schedule 19.01.2009

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

person Community    schedule 25.02.2009

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

public class DerivedWebPart : BaseWebPart

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

    public DerivedWebPart() : base()
    {
    }
person Community    schedule 24.03.2009

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

namespace MyNamespace
{

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

    }
}
person Ben Collins    schedule 20.11.2010

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

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

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

person Shannon Bray    schedule 08.11.2009