Question

J'ai développé une partie Web et si je l'installe manuellement, tout va bien.

Toutefois, lorsque j'ai emballé le composant WebPart en suivant les instructions de ce site Web, http://www.theartofsharepoint.com/2007 /05/how-to-build-solution-pack-wsp.html

Je reçois cette erreur dans les fichiers journaux:

09/23/2008 14:13:03.67  w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       8l4d    Monitorable Error importing WebPart. Cannot import Project Filter.   
09/23/2008 14:13:03.67  w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       89ku    High        Failed to add webpart http%253A%252F%252Fuk64p12%252FPWA%252F%255Fcatalogs%252Fwp%252FProjectFilter%252Ewebpart;Project%2520Filter.  Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import Project Filter.     at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(...  
09/23/2008 14:13:03.67* w3wp.exe (0x1B5C)                           0x1534  Windows SharePoint Services     Web Parts                       89ku    High        ...String eventArgument)     

Le bit pertinent est:

http%253A%252F%252Fuk64p12%252FPWA%252F%255Fcatalogs%252Fwp%252FProjectFilter%252Ewebpart;Project%2520Filter.
Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import Project Filter.
at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)
at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)
at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)
at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)

Et cela s'accompagne d'un message d'erreur plutôt succinct: "Impossible d'importer le composant WebPart".

J'ai vérifié et mon .dll est enregistré comme étant sécurisé, il figure dans le GAC, la fonctionnalité est activée et les composants WebPart apparaissent dans la bibliothèque de composants WebPart avec toutes les propriétés correctes indiquant que les fichiers de composants WebPart ont été lus avec succès. .

Tout semble être en place, pourtant SharePoint et son erreur expliquent comment résoudre le problème.

Toute aide pour trouver une solution est appréciée.

Était-ce utile?

La solution

Je l'ai compris.

Le message d'erreur est celui du fichier .webpart:

<?xml version="1.0" encoding="utf-8"?>
<webParts>
  <webPart xmlns="http://schemas.microsoft.com/WebPart/v3">
    <metaData>
      <!--
      The following Guid is used as a reference to the web part class, 
      and it will be automatically replaced with actual type name at deployment time.
      -->
      <type name="7F8C4D34-6311-4f22-87B4-A221FA8735BA" />
      <importErrorMessage>Cannot import Project Filter.</importErrorMessage>
    </metaData>
    <data>
      <properties>
        <property name="Title" type="string">Project Filter</property>
        <property name="Description" type="string">Provides a list of Projects that can be used to Filter other Web Parts.</property>
      </properties>
    </data>
  </webPart>
</webParts>

Le problème est que le fichier .webpart d'origine a été créé sur un système 32 bits sur lequel Visual Studio Extensions for WSS est installé.

Toutefois, comme je suis maintenant sur une machine 64 bits, VSEWSS n’est pas disponible, et j’estime que le GUID ci-dessus n’est pas remplacé, car je n’utilise pas ces outils de déploiement.

Le remplacement du GUID par le nom de type complet fonctionne.

Donc, si vous rencontrez le message d'erreur de votre noeud importErrorMessage, vérifiez que votre noeud de type dans le fichier .webpart ressemble davantage à ceci (exemple sans rapport):

<type name="TitleWP.TitleWP, TitleWP, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" />

Ceci est dans le format: Classe, espace de noms, version, culture, clé publique

Vous pouvez extraire cela facilement du fichier web.config associé à votre instance SharePoint, car il figurera dans la liste des contrôles sécurisés.

Autres conseils

Nous avons eu le même problème et avons constaté que WebPartImporter appelait le constructeur de notre composant WebPart et que, dans le constructeur, nous exécutions SPSecurity.RunWithElevatedPrivileges.

Pour une raison quelconque, WebPartImporter ne peut pas gérer cela. Nous avons donc simplement transféré notre code du constructeur vers OnInit (où il appartenait réellement) et tout va bien.

Toutes les bonnes suggestions. Mon problème était unique et stupide: j'avais déployé la solution pour la première application Web mais pas pour la seconde. Cependant, SharePoint m'a toujours permis d'activer la fonctionnalité sur la deuxième collection de sites de Web App (je ne sais pas pourquoi). Cela signifiait que la deuxième application Web ne disposait pas d'une entrée de contrôle sécurisée dans ce fichier Web.config (et que je vérifiais bêtement le premier Web.config).

Vérifiez donc que l'application Web / le fichier Web.config est correct.

Je reçois maintenant une réponse au problème similaire à celui décrit ci-dessous:

Lorsque j'essaie d'ajouter une nouvelle partie wep à la page, puis SharePoint me montre un message d'erreur. Indiquez-moi: je ne peux pas importer ma partie Web. Ce message d'erreur est défini dans le fichier .webpart.

J'ai donc essayé d'ajouter d'autres parties Web à la page. Une apparence étrange de quesiton, certaines peuvent être ajoutées, d'autres ne peuvent pas être ajoutées.

Après avoir tracé et analysé le code de ma partie Web, j'ai trouvé la raison:

Ancien code de la partie Web ProjectInfo (mon nom de partie Web) est:

namespace ProjectInfo
....
 public class ProjectInfo:System.Web.UI.WebControls.WebParts.Web.part
 {
        .....
        private SPWeb _spWeb;
        private SPList _spList;
        private string _listName = "ProjectDocs";
        ......
 }
public ProjectInfo()
 {
        .....
            _spWeb = SPContext.Current.Web;
            //It show me a error here when i trace the code
            _spList = _spWeb.Lists[_listName]; 
        .....
 }

Arrêtez maintenant, je pensais que c’était peut-être le problème de commande de la page Web init. En tant que contrôle de composant WebPart de chargement de page Web, la fonction de construction ProjectInfo () sera exécutée dans un premier temps. En fait, la page Web n'a pas fini son init. à l'heure.

alors j'ai fait un test. Premièrement, je mets un bon site web dans la page, ça va. Ensuite, j'essaie de mettre la partie Web dans la page qui ne peut pas être ajoutée pour l'instant. ~~ OK !! Cela fonctionne ... parce que la page déjà init. fini.

ok! J'ai corrigé mon code:

   namespace ProjectInfo
    ....
     public class ProjectInfo:System.Web.UI.WebControls.WebParts.Web.part
     {
            .....
            private SPWeb _spWeb;
            private SPList _spList;
            private string _listName = "ProjectDocs";
            ......
     }
    public ProjectInfo()
     {
            .....
                //Remove code in constructure function.
                //_spWeb = SPContext.Current.Web;
                //It show me a error here when i trace the code
                //_spList = _spWeb.Lists[_listName]; 
            .....
     }

   protected override void CreateChildControls()
        {
         ....
           base.CreateChildControls();

            _spWeb = SPContext.Current.Web;
            _spList = _spWeb.Lists[_listName];
          ....
         }

Après le test, le message d'erreur ne s'est plus reproduit.   LoL ~~

J'espère que cela vous aidera.

J'ai vu cette anomalie plusieurs fois sans une bonne résolution.

Vérifiez que votre nom d'assembly, d'espace de nom, de classe est correct EVERYWHERE. Cela m'a suspendu plus d'une fois.

Assurez-vous de disposer d'une entrée SafeControls valide.

Assurez-vous que votre fichier .webpart est valide (laissez SharePoint le créer pour vous si vous le pouvez)

Si vous êtes absolument convaincu que tout est correct, alors vous êtes coincé dans un endroit que j'ai été plusieurs fois. La seule chose que je peux dire, c'est que VS compile l’ensemble mal. Le seul correctif que j'ai trouvé est de créer un nouveau projet VS et de le configurer comme vous le souhaitez, puis copiez THE TEXT de vos anciens fichiers CS dans vos nouveaux fichiers CS ... ne copiez pas les fichiers eux-mêmes ... l'objectif est d'avoir tout frais.

Cela a fonctionné pour moi. Bonne chance.

Avez-vous recyclé votre processus de travail ou réinitialisé IIS?

Mine résolue.

je recevais cette erreur:

===========================================================================
Error importing WebPart. Cannot import ........ Web Part.
Failed to add webpart 
Exception Microsoft.SharePoint.WebPartPages.WebPartPageUserException: Cannot import ... Web Part.     at Microsoft.SharePoint.WebPartPages.WebPartImporter.CreateWebPart(Boolean clearConnections)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, Uri webPartPageUri, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartImporter.Import(SPWebPartManager manager, XmlReader reader, Boolean clearConnections, SPWeb spWeb)     at Microsoft.SharePoint.WebPartPages.WebPartQuickAdd.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)   
===========================================================================

"Impossible d'importer la WebPart ..."

Le problème était: GUIDS non apparié

Vérifiez si les indications sur la classe webpart et dans les classes .xml et .webpart sont identiques.

Je copiais du code à partir d'autres sources Webparts. (Plusieurs documents télécharger Wepart sur Codeplex) et oublié de réparer les guids.

J'ai également rencontré cette erreur lorsque les assemblys référencés par mon composant WebPart dans le GAC ont été signés par un fichier de clé de nom fort différent de celui auquel je m'attendais. Je l'ai découvert en décidant de mettre à jour ces DLL. Lors de son insertion dans le GAC, j’ai remarqué qu’il y avait 2 entrées pour la même DLL, mais qu’elles avaient des jetons de clé publique différents

J'ai eu cette erreur lorsque j'ai créé un composant WebPart de classe de base, puis que j'ai hérité d'une classe dérivée. La classe de base fonctionnait bien, mais la classe dérivée a échoué lorsque j'ai tenté de l'ajouter à une page Web avec la même erreur que la publication d'origine. Dans mon cas, j'ai dû ajouter un modificateur public à la classe:

public class DerivedWebPart : BaseWebPart

J'ai également ajouté un constructeur dans la classe dérivée pour appeler celle de la classe de base - bien que je pense que vous ne devriez pas vraiment en avoir besoin:

    public DerivedWebPart() : base()
    {
    }

J'ai eu un problème très similaire à celui-ci, mais Guids n'était pas le problème: mon composant WebPart n'avait pas l'attribut CLSCompliannt défini sur false. Comme si:

namespace MyNamespace
{

    [CLSCompliant(false)]
    [Guid("...")]
    public class MyWidget : MyWebPartBaseClass
    {

    }
}

J'ai constaté que le mien n'importait pas la première fois, mais si je cliquais sur "Nouveau" et que je l'ajoutais, cela fonctionnerait.

À partir de là, j'ai récupéré une copie du XML et je l'ai sauvegardé dans mon projet. La partie Web a bien fonctionné par la suite.

Il ne me fallut que DAYS pour arriver à ce point. Beaucoup de temps perdu.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top