Веб-часть 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.spdatastrong > :
<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, вы все равно можете столкнуться с этой проблемой. Причина в том, что, как упоминалось выше, пространство имен не было изменено в файле .spdatastrong > , который является файлом, созданным самой Visual Studio. Чтобы убедиться, что вы заходите в Виртуальные каталоги в inetroot. Если пространство имен по-прежнему является более старым, выполните поиск в своем решении и выясните конфликтующее. Скорее всего, в файле project.spdata, который все игнорируют.