Веб-часть 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 на "Полный" (что я никогда не буду делать на производстве, но пытался сузить проблему), но все равно не повезло. Есть идеи? Благодарю.
10 ответов
Развертываете ли вы свою веб-часть с помощью решения 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" />
Вы получаете идею: тройная проверка согласованности имен по всем артефактам проекта.
Я также видел эту проблему, когда я изменил пространство имен для моей сборки WebPart, и пространство имен не было обновлено во всех исходных файлах в решении.
Убедитесь, что у вас есть класс веб-части как Public, это может звучать глупо, но я однажды столкнулся. Также попробуйте заполнить веб-часть из галереи веб-частей.
Обычно это происходит при изменении имени веб-части с VisualWebPart1 на MyNewWebPart. После выполнения поиска и замены по всему решению переименуйте все файлы и папки с помощью VisualWebPart1 в MyNewWebPart. Проблема вызвана тем, что файл SharePointProjectItem.spdata не обновляется. Откройте SharePointProjectItem.spdata и замените VisualWebPart1 на MyNewWebPart. Это решает проблему в большинстве случаев.
Откройте каждый файл в решении и убедитесь, что нет ссылок на VisualWebPart1. Если есть, измените их вручную на MyNewWebPart.
Хорошо, это может быть очень поздно, но будет полезно для остальных. Я создал веб-часть и получал сообщение об ошибке: "Веб-часть или элемент управления веб-формы на этой странице не могут быть отображены или импортированы. Не удалось найти тип или он не зарегистрирован как безопасный".
Я подумал, что я использую Диаграмму внутри этой веб-части, и как только я удалил ссылку на диаграмму, это сработало. Таким образом, элемент управления Chart также должен быть помечен как безопасный.
Убедитесь, что все ссылки в веб-части являются безопасными.
Geo,
Прошло много времени с тех пор, как я работал с веб-частями, но я изложил здесь шаги:
http://www.codersbarn.com/?tag=/webpart
Может быть, есть что-то, что может помочь.
Энтони:-)
Ну, если вы уже нашли решение, это здорово. Но вот совет для тех, кто ищет больше. Если вы добавили новую веб-часть или визуальную веб-часть и просто заменили пространство имен в таких файлах, как файлы кода или Element.xml или даже файл.webpart, у вас может возникнуть эта проблема.Причина в том, что, как уже упоминалось выше, пространство имен не было изменено в файле.spdata, который является файлом, созданным самой Visual Studio. Просто чтобы быть уверенным, зайдите в Виртуальные каталоги в inetroot. Если пространство имен все еще старое, выполните поиск в своем решении и найдите конфликтующее. Скорее всего, в файле project.spdata, который каждый обычно игнорирует.
Как уже упоминал Тим Скарборо, это может произойти, если вы измените пространство имен и не обновите все исходные файлы (поскольку это не делается автоматически). Просто для иллюстрации, в моем случае проблема заключалась в том, что у класса webpart было новое пространство имен ab, но я забыл обновить его в файле 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>