Веб-часть 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 на «Полный» (чего я бы никогда не сделал в производственной среде, но попытался сузить проблему), но мне все равно не повезло. Любые идеи? Спасибо.


person Geo Ego    schedule 06.11.2009    source источник
comment
Эээ, это может быть глупый вопрос, но есть ли у вас настоящий токен открытого ключа в ваших файлах вместо кучи хэшей? ... Это неспроста называется публичным.   -  person Preston Guillot    schedule 07.11.2009
comment
Это совсем не глупый вопрос. У меня есть настоящий ключ вместо этих хэшей.   -  person Geo Ego    schedule 09.11.2009


Ответы (10)


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

person Kyle Trauberman    schedule 10.11.2009
comment
Шаблоны SmartTemplates SharePoint, которые я использую, используют WSPBuilder и установщик SharePoint. Это отличные инструменты, которые сразу решили мою проблему. Спасибо! - person Geo Ego; 11.11.2009
comment
Поскольку эта проблема возникает у очень многих людей, я подумал, что могу также предоставить ссылку на шаблоны SmartTemplates SharePoint: smarttemplates.codeplex.com/Wikipage. Это фантастический инструмент, который использует преимущества как WSPBuilder, так и SP Installer, и делает развертывание совершенно безболезненным и последовательным. - person Geo Ego; 30.03.2010

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

вы поняли: трижды проверьте согласованность имен во всех артефактах проекта.

person Ariel    schedule 04.05.2011
comment
В моем случае это был файл SharepointProjectItem.spdata в визуальной веб-части, который содержал неправильное пространство имен. Легко не заметить! - person Rogier; 19.10.2011
comment
Моя веб-часть изначально называлась VisualWebPart1. Я переименовал его, но пятая строка файла .webpart (где указано Namespace.Class1 выше) все еще относилась к VisualWebPart1. Поиск в файлах помог (как и этот ответ). - person John; 16.05.2012
comment
У меня была такая же проблема, когда я пытался настроить пространство имен, чтобы НЕ включать имя веб-части. Лично пространство имен не должно включать имя класса, что не является стандартом в других странах Microsoft. Также необходимо изменить файл SharepointProjectItem.spdata. Рекомендую отметить это как ответ! - person CigarDoug; 31.07.2014
comment
Это решило мою проблему; Изначально я создал тип и назвал проект WeFormBla вместо WebFormBla и не менял его везде. - person B. Clay Shannon; 23.03.2015

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

person Kusek    schedule 06.11.2009
comment
Я перепроверил это, и класс, который он использует, действительно общедоступен. Поскольку он установлен вручную, он уже отображается в самой галерее, и я не могу заполнить его из раздела «Новые веб-части». - person Geo Ego; 06.11.2009
comment
не совсем моя проблема, но достаточно близко, чтобы я мог смотреть в правильном направлении, спасибо! - person Rob; 15.06.2010

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

person Tim Scarborough    schedule 01.12.2010

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

person IrishChieftain    schedule 07.11.2009
comment
Моя первая мысль - а где на сервере DLL? Локальный каталог bin или GAC? - person Greg Hurlman; 08.11.2009
comment
.Dll находится в каталоге bin на сервере SharePoint. Я попытался установить .dll в каталог WINDOWS \ assembly, и, хотя он установился нормально, мне все равно не удалось добавить элемент управления на страницу. Я работаю с SharePoint на конкретном порте (один, отличный от 80) и предполагал, что могу установить .dll в каталог \ bin \ в папке для этого порта, но в любом случае радости нет. - person Geo Ego; 09.11.2009
comment
Я не понимаю, почему я не вижу .dll в разделе «Новые веб-части», когда перемещаю его в WINDOWS \ Assembly. Он должен появиться в списке, чтобы я мог заполнить им свою галерею веб-частей, не так ли? - person Geo Ego; 09.11.2009
comment
В итоге я добился успеха, используя инструмент SharePoint SmartTemplates, доступный через CodePlex. Я все еще хотел бы знать, почему я не могу добиться этого вручную, но пока я могу продолжить этот проект, поэтому я рассмотрю его позже. Всем спасибо за помощь. - person Geo Ego; 09.11.2009
comment
Geo, я ответил на аналогичный вопрос здесь: stackoverflow.com/questions/1754006/ - person IrishChieftain; 19.11.2009

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

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

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

person Tiger    schedule 08.09.2011

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

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

person Poodle    schedule 20.04.2012

Гео,

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

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

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

Энтони :-)

person IrishChieftain    schedule 10.11.2009
comment
В этой статье есть несколько интересных моментов, которые мне еще не были представлены, в частности, некоторые настройки в web.config, которые могут вызвать проблемы. Спасибо за ссылку! - person Geo Ego; 11.11.2009

Как уже упоминал Тим Скарборо, это может произойти, если вы измените пространство имен и не обновите все исходные файлы (поскольку это не выполняется автоматически). Просто для иллюстрации, в моем случае проблема заключалась в том, что у класса веб-части было новое пространство имен 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>
person AGuyCalledGerald    schedule 17.10.2012

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

person user2473872    schedule 11.07.2013