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

у меня есть веб-часть SharePoint (по сути, просто приложение "Hello World"), которое я только что создал, и у меня проблема с его развертыванием. Я подписал .dll, создал .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" />

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

10 ответов


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


одна из возможностей заключается в том, что имена типов не были синхронизированы с .файл 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 по:

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

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


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


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


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


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

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

убедитесь, что все ссылки в webpart безопасны для типов.


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

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


Гео

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

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

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

Антоний :-)


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

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

Ну, если вы уже нашли решение, это здорово. Но вот совет для тех, кто ищет более. Если вы добавили новый webpart или visual webpart и просто замените пространство имен в таких файлах, как файлы кода или элемент.XML или даже .файл webpart вы все еще можете столкнуться с этой проблемой. Причина в том, что, как упоминалось выше, пространство имен не было изменено в .spdata файл, который является файлом, созданным самим Visual studio. Просто чтобы быть уверенным, иди. проверьте в Виртуальные Каталоги в корне inetroot. Если пространство имен по-прежнему является более старым, выполните поиск в своем решении и найдите конфликтующее. Скорее всего, в проекте.файл spdata, который все склонны игнорировать.