2009-11-06 5 views
11

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

A Web Part or Web Form Control on this Page cannot be displayed or imported. The type could not be found or it is not registered as safe.

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

+0

Это может быть глупый вопрос, но есть ли у вас фактический токен открытого ключа в ваших файлах вместо кучки хэшей? ... Это называется «общественностью» по какой-то причине. –

+0

Это не глупый вопрос. У меня есть фактический ключ вместо этих хэшей. –

ответ

4

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

+0

В SharePoint SmartTemplates, которые я использую, используются WSPBuilder и установщик SharePoint. Они потрясающие инструменты и очистили мою проблему сразу с места. Благодаря! –

+0

Будучи так много людей, которые сталкиваются с этой проблемой, я подумал, что также предоставил ссылку на SharePoint SmartTemplates: http://smarttemplates.codeplex.com/Wikipage. Это фантастический инструмент, который использует как WSPBuilder, так и SP Installer, и делает развертывание полностью безболезненным и последовательным. –

3

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

+0

Я дважды проверял это, и класс, который он использует, действительно общедоступен. Поскольку он установлен вручную, он уже отображается в самой галерее, и я не могу заполнить его из раздела «Новые веб-части». –

+0

не совсем моя проблема, но достаточно близко для меня, чтобы посмотреть в правильном направлении, спасибо! – Rob

2

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

+0

Моя первая мысль - где находится DLL на сервере? Локальный каталог bin или GAC? –

+0

.dll находится в каталоге bin на сервере SharePoint. Я попытался установить .dll в каталог WINDOWS \ assembly, и хотя он был установлен отлично, я все еще не смог добавить элемент управления на страницу. Я работаю с SharePoint на определенном порту (кроме 80) и предположил, что я могу установить DLL в каталог \ bin \ в папке для этого порта, но нет никакой радости в любом случае. –

+0

Я не понимаю, почему я не вижу .dll в разделе «Новые веб-части», когда я переношу его на WINDOWS \ Assembly. Он должен появиться в списке, чтобы я мог заполнить его галерею веб-частей, не так ли? –

0

Geo,

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

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

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

Энтони :-)

+1

У вас есть интересные моменты в этой статье, Я еще не подвергался воздействию, особенно некоторые из настроек в web.config, которые могут вызвать проблемы. Спасибо за ссылку! –

3

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

33

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

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

+1

Со мной это был файл SharepointProjectItem.spdata под Visual Web Part, который содержал неправильное пространство имен. Легко упускать из виду! – Rogier

+1

Моя веб-часть изначально называлась VisualWebPart1. Я переименовал его, но пятая строка .webpart (где он говорит Namespace.Class1 выше) все еще упоминается в VisualWebPart1. Найти файлы помогли (как и этот ответ). – John

+0

У меня была такая же проблема, когда я попытался настроить пространство имен, чтобы НЕ включать имя веб-части. Лично, пространство имен не должно включать имя класса, которое не является стандартом во всем мире на территории Microsoft. Также необходимо изменить файл SharepointProjectItem.spdata. Рекомендовать это можно пометить как ответ! – CigarDoug

1

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

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

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

1

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

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

0

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

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