web-dev-qa-db-fra.com

Composant WebPart Sharepoint: type introuvable/enregistré comme sûr

J'ai un composant WebPart SharePoint (essentiellement une application "Hello World") que je viens de créer et je rencontre un problème pour le déployer. J'ai signé le fichier .dll, créé le fichier .dwp et l'ai enregistré en tant que contrôle sécurisé dans web.config. Je peux l'ajouter à la galerie de composants WebPart et en ajouter les détails; Cependant, lorsque je tente de l'ajouter à une page, j'obtiens le message d'erreur suivant:

Un composant WebPart ou un contrôle de formulaire Web sur cette page Ne peut pas être affiché ni importé. Le type est introuvable ou il est Non enregistré comme sûr.

Voici mon fichier .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>

et l'entrée que j'ai ajoutée à web.config:

<SafeControl Assembly="SimpleWebPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=################" Namespace="MyWebParts" TypeName="*" Safe="True" />

J'ai également essayé d'utiliser des caractères génériques pour l'espace de noms, ce qui n'a pas aidé. J'ai même essayé de définir le niveau de confiance de web.config sur "Complet" (ce que je ne ferais jamais en production, mais j'ai essayé de tenter de réduire le problème) et je n'ai toujours pas eu de chance. Des idées? Merci.

11
Geo Ego

Déployez-vous votre site Web à l'aide d'une solution SharePoint (fichier .wsp)? Départ WSPBuilder si vous ne l'êtes pas. Nous utilisons également SharePoint Installer Entre les deux, de nombreux problèmes (qu’ils soient dus à une erreur humaine ou autre) dans les déploiements, comme votre problème ont été résolus dans notre environnement.

4
Kyle Trauberman

Une possibilité est que les noms de types ne soient pas synchronisés avec le fichier .webpart. Par ex.

Dans le fichier .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$" />

et dans le fichier .cs :

namespace Namespace
{
    public class Class2 : WebPart

et dans le fichier SharePointProjectItem.spdata :

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

vous avez l’idée: vérifiez trois fois la cohérence des noms dans tous les artefacts du projet.

33
Ariel

J'ai également constaté ce problème lorsque j'ai modifié l'espace de noms de mon assemblage WebPart et que celui-ci n'était pas mis à jour dans tous les fichiers source de la solution.

3
Tim Scarborough

Assurez-vous que vous avez la classe de composants WebPart en tant que publique, cela peut paraître idiot, mais j’ai fait face une fois. Essayez également de renseigner le composant WebPart à partir de la galerie de composants WebPart.

3
Kusek

Avez-vous essayé de le déployer sur le GAC?

2
IrishChieftain

Cela se produit généralement lorsque vous modifiez le nom du composant WebPart de VisualWebPart1 en MyNewWebPart. Après avoir effectué une recherche et un remplacement sur l'ensemble de la solution, renommez tous les fichiers et dossiers avec VisualWebPart1 en MyNewWebPart. Le problème est dû au fait que le fichier SharePointProjectItem.spdata n'est pas mis à jour. Ouvrez SharePointProjectItem.spdata et remplacez VisualWebPart1 par MyNewWebPart. Cela corrige le problème dans la plupart des cas.

Ouvrez chaque fichier de la solution et vérifiez qu'il n'y a aucune référence à VisualWebPart1. Si tel est le cas, modifiez-les manuellement en MyNewWebPart.

1
Poodle

Ok, cela peut être très tard mais sera utile pour le reste. J'ai créé un composant WebPart et l'erreur "Un composant WebPart ou un contrôle de formulaire Web de cette page ne peut être ni affiché ni importé. Le type est introuvable ou il n'est pas enregistré comme étant sécurisé."

J'ai pensé que j'utilisais un graphique dans cette Webpart et une fois que j'ai supprimé la référence du graphique, cela a fonctionné. Ainsi, le contrôle Chart doit également être marqué en tant que typesafe.

Assurez-vous que toutes les références dans le WebPart sont de type sécurisé.

1
Tiger

Géo,

Cela fait longtemps que je n'ai pas travaillé avec WebPart, mais j'ai expliqué les étapes ici:

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

Peut-être qu'il y a quelque chose qui peut aider.

Anthony :-)

0
IrishChieftain

Comme Tim Scarborough l'a déjà mentionné, cela peut se produire si vous modifiez le namespace et ne mettez pas à jour tous les fichiers source (car cela ne se fait pas automatiquement). À titre d’illustration, dans mon cas, le problème était que la classe webpart avait un nouvel espace de noms a.b mais j’ai oublié de le mettre à jour dans le fichier 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
AGuyCalledGerald

Eh bien, si vous avez déjà trouvé la solution, c'est génial. Mais voici un conseil pour quelqu'un qui en cherche plus. Si vous avez ajouté un nouveau composant WebPart ou un composant WebPart visuel et remplacez simplement l'espace de noms dans les fichiers tels que les fichiers de code ou le fichier Element.xml ou même le fichier .webpart, vous rencontrerez peut-être ce problème. La raison en est que, comme mentionné plus haut, l'espace de nom n'a pas été modifié dans. Spdata file , qui est un fichier créé par Visual studio lui-même. Juste pour être sûr d'aller vérifier dans le Répertoires virtuels dans l'inetroot. Si l'espace de noms est toujours le plus ancien, effectuez une recherche dans votre solution et identifiez le conflit. Très probablement dans le fichier project.spdata, que tout le monde a tendance à ignorer.

0
user2473872