Веб-часть Sharepoint: тип не найден или зарегистрирован как безопасный

У меня есть веб-часть SharePoint (по существу, просто приложение Hello World), которое я только что создал, и у меня возникла проблема с ее развертыванием. Я подписал .dll, создал .dwp и зарегистрировал его как безопасный элемент управления в web.config. Я могу добавить его в галерею веб-частей и добавить детали для нее; однако, когда я пытаюсь добавить его на страницу, я получаю следующую ошибку:

Элемент веб-части или веб-формы на этом Страница не может быть отображена или импортирована. Тип не найден или он не зарегистрировано как безопасное.

Ниже приведен мой файл .dwp:

<?xml version="1.0"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2">
   <Assembly>SimpleWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=################</Assembly>
   <TypeName>MyWebParts.SimpleWebPart</TypeName>
   <Title>My Simple Web Part</Title>
   <Description>A simple Web Part</Description>
</WebPart>

и запись, которую я добавил в web.config:

<SafeControl Assembly="SimpleWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=################" Namespace="MyWebParts" TypeName="*" Safe="True" />

Я также попытался использовать подстановочные знаки для пространства имен, что не помогло. Я даже попытался установить уровень доверия web.config на "Полный" (который я никогда не делал бы на производстве, но пытался попытаться сузить проблему), но до сих пор не повезло. Есть идеи? Спасибо.

Ответ 1

Развертываете ли вы свой веб-сайт с помощью SharePoint Solution (.wsp файл)? Проверьте WSPBuilder, если вы этого не сделаете. Мы также используем установщик SharePoint. Между этими двумя проблемами много проблем (будь то из-за человеческой ошибки или иначе) при развертывании, например, ваша проблема были решены в нашей среде.

Ответ 2

Одна из возможностей заключается в том, что имена типов не синхронизируются с файлом .webpart. Например,

В файле .webpart:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <type name="Namespace.Class1, $SharePoint.Project.AssemblyFullName$" />

и в файле .cs:

namespace Namespace
{
    public class Class2 : WebPart

и в файле SharePointProjectItem.spdata​​strong > :

  <SafeControl Assembly="Class2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9385058ce1ee51a9" Namespace="Namespace" TypeName="*" Safe="True" SafeAgainstScript="False" />

вы получаете идею: согласовать последовательность тройных проверок во всех артефактах проекта.

Ответ 3

Убедитесь, что у вас есть класс веб-частей как общедоступный, может показаться глупым, но я столкнулся один раз. Также попробуйте заполнить веб-часть из галереи веб-частей.

Ответ 4

Я также видел эту проблему, когда я изменил пространство имен для моей сборки WebPart, и пространство имен не было обновлено во всех исходных файлах в решении.

Ответ 5

Попробовали ли вы развернуть его в GAC?

Ответ 6

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

Я понял, что я использовал диаграмму внутри этого веб-части, и как только я удалил ссылку на диаграмму, она сработала. Таким образом, элемент управления Chart также должен быть отмечен как typeafe.

Убедитесь, что все ссылки в веб-части безопасны типа.

Ответ 7

Обычно это происходит, когда вы меняете имя веб-части с VisualWebPart1 на MyNewWebPart. После выполнения поиска и замены по всему решению переименуйте все файлы и папки с помощью VisualWebPart1 в MyNewWebPart. Проблема вызвана тем, что файл SharePointProjectItem.spdata не обновляется. Откройте SharePointProjectItem.spdata и замените VisualWebPart1 MyNewWebPart. Это устраняет проблему в большинстве случаев.

Откройте каждый файл в решении и убедитесь, что ссылки на VisualWebPart1 отсутствуют. Если есть, измените их вручную на MyNewWebPart.

Ответ 8

Geo,

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

http://www.codersbarn.com/?tag=/webpart

Может быть, там что-то может помочь.

Энтони: -)

Ответ 9

Как уже упоминал Тим Скарборо, это может произойти, если вы измените пространство имен и не обновляете все исходные файлы (так как это не делается автоматически). Для иллюстрации, в моем случае проблема заключалась в том, что класс webpart имел новое пространство имен a.b, но я забыл обновить его в файле веб-сайта:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
<metaData>
             //update below!
  <type name="a.b.yourClass, $SharePoint.Project.AssemblyFullName$" />

  <importErrorMessage>$Resources:core,ImportErrorMessage;</importErrorMessage>
</metaData>
<data>
 <properties>
    <property name="Title" type="string">your Title</property>
    <property name="Description" type="string">your Description</property>
  </properties>
</data>
 </webPart>
</webParts>

Ответ 10

Хорошо, если вы уже нашли решение, это здорово. Но вот подсказка для тех, кто ищет больше. Если вы добавили новый веб-сайт или визуальный веб-сайт и просто заменили пространство имен в таких файлах, как файлы кода или Element.xml или даже файл .webpart, вы все равно можете столкнуться с этой проблемой. Причина в том, что, как упоминалось выше, пространство имен не было изменено в файле .spdata​​strong > , который является файлом, созданным самой Visual Studio. Чтобы убедиться, что вы заходите в Виртуальные каталоги в inetroot. Если пространство имен по-прежнему является более старым, выполните поиск в своем решении и выясните конфликтующее. Скорее всего, в файле project.spdata, который все игнорируют.