Вопрос

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

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

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

Это было полезно?

Решение

Догадаться.

Сообщение об ошибке содержится в файле .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" />

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

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

Другие советы

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

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

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

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

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

Когда я пытаюсь добавить на страницу новую веб-часть, 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().На самом деле веб-страница не завершила свою инициализацию.к тому времени.

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

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

   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];
          ....
         }

После проверки сообщение об ошибке больше не появлялось.лол ~~

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

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

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

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

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

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

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

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

Решил мою.

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

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

Проверьте, совпадают ли руководства по классу веб-части, а также по классам .xml и .webpart.

Я копировал код из других источников веб-частей.(Множественная загрузка документов Wepart на Codeplex) и забыл исправить руководства.

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

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

public class DerivedWebPart : BaseWebPart

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

    public DerivedWebPart() : base()
    {
    }

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

namespace MyNamespace
{

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

    }
}

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top