Domanda

Ho una web part che ho sviluppato e se installo manualmente la web part va bene.

Tuttavia, quando ho impacchettato la web part seguendo le istruzioni su questo sito Web come guida: http://www.theartofsharepoint.com/2007 /05/how-to-build-solution-pack-wsp.html

Ricevo questo errore nei file di registro:

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)     

Il bit pertinente è:

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)

E questo è accompagnato da un messaggio di errore piuttosto conciso: " Impossibile importare web part " ;.

Ho controllato e il mio .dll è registrato come sicuro, è nel GAC, la funzione è attivata e le web part appaiono nella libreria della web part con tutte le proprietà corrette che mostrano che i file della webpart sono stati letti correttamente .

Tutto sembra essere a posto, eppure ho ricevuto quell'errore e una piccola spiegazione da SharePoint su come risolverlo.

Qualsiasi aiuto per trovare una soluzione è apprezzato.

È stato utile?

Soluzione

Capito.

Il messaggio di errore è quello del file .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>

Il problema è che il file .webpart originale è stato creato su un sistema a 32 bit con installato Visual Studio Extensions per WSS.

Tuttavia, dato che ora sono su un computer a 64 bit, VSEWSS non è disponibile e credo che il GUID sopra riportato non venga sostituito poiché non sto utilizzando quegli strumenti di distribuzione.

La sostituzione del GUID con il nome completo del tipo funziona.

Quindi, se riscontri il messaggio di errore dal tuo nodo importErrorMessage, controlla che il tuo nodo di tipo nel file .webpart assomigli di più a questo (esempio non correlato):

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

Questo è nel formato: Classe, spazio dei nomi, versione, cultura, chiave pubblica

Puoi prenderlo facilmente dal file web.config associato all'istanza di SharePoint, poiché sarà nell'elenco dei controlli sicuri.

Altri suggerimenti

Abbiamo avuto lo stesso problema e abbiamo scoperto che il costruttore della nostra web part veniva chiamato dal WebPartImporter e all'interno del costruttore stavamo eseguendo SPSecurity.RunWithElevatedPrivileges.

Per qualche motivo WebPartImporter non può gestirlo. Quindi, abbiamo semplicemente spostato il nostro codice dal costruttore a OnInit (dove apparteneva davvero) e tutto va bene.

Tutti ottimi suggerimenti. Il mio problema era unico e sciocco: avevo distribuito la soluzione alla prima applicazione Web ma non alla seconda. SharePoint mi ha comunque permesso di attivare la funzionalità nella raccolta siti della seconda app Web (non so perché). Ciò significava che la seconda App Web non aveva una voce di controllo sicura in questo file Web.config (e stavo controllando stupidamente il primo Web.config).

Quindi, ricontrolla che stai guardando l'applicazione web / web.config corretta.

Ora ricevo una risposta per un problema simile al seguente:

Quando provo ad aggiungere una nuova parte wep alla pagina, quindi sharepoint mi mostra un messaggio di errore, dimmi: non riesco a importare la mia web part, questo messaggio di errore viene definito nel file .webpart.

Quindi ho provato ad aggiungere alcune altre web part nella pagina, uno strano aspetto quesiton, alcuni possono essere aggiunti, alcuni non possono essere aggiunti.

Dopo aver tracciato il codice della mia web part e analizzato, ho trovato il motivo:

Il vecchio codice per la web part ProjectInfo (il mio nome della web part) è:

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]; 
        .....
 }

Basta ora, ho pensato che forse fosse il problema di ordine di inizializzazione della pagina web. Come controllo della web part per il caricamento di pagine Web, inizialmente verrà avviata la funzione di costruzione ProjectInfo (). In realtà, la pagina web non ha terminato il suo init. entro il momento.

quindi ho fatto un test. in primo luogo, ho inserito una buona rete nella pagina, va bene. quindi, provo a inserire la web part nella pagina che non può essere aggiunta proprio ora. ~~ OK !! Funziona ... perché la pagina è già init. finito.

Ok! Ho corretto il mio codice:

   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];
          ....
         }

Dopo aver eseguito il test, il messaggio di errore non è più stato ripristinato.   LoL ~~

Spero che questo chiarimento ti possa aiutare.

Ho visto più volte questa anomalia senza una buona risoluzione.

Verifica che il nome del tuo assieme, spazio dei nomi e classe sia corretto OVUNQUE. Questo mi ha appeso più di una volta.

Assicurati di avere una voce SafeControls valida.

Assicurati che il tuo file .webpart sia valido (consenti a SharePoint di crearlo per te)

Se sei assolutamente sicuro che tutto sia corretto, allora sei bloccato in un posto in cui sono stato diverse volte. L'unica cosa che mi viene in mente è che VS sta compilando l'assembly in modo errato. L'unica soluzione che ho trovato è quella di creare un nuovo progetto VS e impostarlo come ti serve, quindi copiare IL TESTO dei tuoi vecchi file CS nei tuoi nuovi file CS ... non copiare i file stessi ... l'obiettivo è avere tutto nuovo.

Questo ha funzionato per me. Buona fortuna.

Hai riciclato il tuo processo di lavoro o ripristinato IIS?

Risolto il mio.

ho visualizzato questo errore:

===========================================================================
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)   
===========================================================================

" Impossibile importare la webpart ... "

Il problema era: GUID non corrispondenti

Controlla se il guid sulla classe webpart e nelle classi .xml e .webpart sono uguali.

Stavo incollando il codice da altre fonti di webpart. (Caricamento multiplo del documento Wepart su Codeplex) e dimenticato di correggere le guide.

Ho riscontrato questo errore anche quando gli assiemi nel GAC a cui faceva riferimento la mia web part erano firmati da un file chiave con nome sicuro diverso da quello che mi aspettavo. Ho scoperto questo quando ho deciso di aggiornare queste DLL. Durante l'inserimento nel GAC ho notato che c'erano 2 voci per la stessa DLL ma avevano token di chiave pubblica diversi

Ho ricevuto questo errore quando ho creato una web part della classe base e quindi ereditato da essa una classe derivata. La classe base andava bene ma la classe derivata fallì quando provai ad aggiungerla a una pagina web con lo stesso errore del post originale. Nel mio caso ho dovuto aggiungere un modificatore pubblico alla classe:

public class DerivedWebPart : BaseWebPart

Inoltre ho aggiunto un costruttore nella classe derivata per chiamare la classe base uno - anche se penso che non dovresti averne bisogno davvero:

    public DerivedWebPart() : base()
    {
    }

Ho avuto un problema molto simile a questo, ma le guide non erano il problema: la mia webpart non aveva l'attributo CLSCompliannt impostato su false. In questo modo:

namespace MyNamespace
{

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

    }
}

Ho scoperto che il mio non è stato importato la prima volta, ma se avessi fatto clic su "Nuovo" e lo avessi aggiunto, avrebbe funzionato.

Da lì ho preso una copia dell'XML e l'ho salvata nel mio progetto. La web part ha funzionato alla grande dopo.

Mi ci sono voluti solo GIORNI per arrivare a questo punto. Un sacco di tempo sprecato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top