2008-09-23 50 views
11

Tengo un elemento web que he desarrollado, y si instalo manualmente el elemento web, está bien.Error de SharePoint: "No se puede importar el elemento web"

Sin embargo, cuando he empaquetado el elemento web siguiendo las instrucciones en este sitio web como una guía: http://www.theartofsharepoint.com/2007/05/how-to-build-solution-pack-wsp.html

me sale este error en los archivos de 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)  

El bit correspondiente es:

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) 

Y eso va acompañado de un mensaje de error bastante escueto: "No se puede importar el elemento web".

He comprobado y mi .dll está registrado como seguro, está en el GAC, la característica está activada, y los elementos web aparecen en la biblioteca de elementos web con todas las propiedades correctas que muestran que los archivos webpart fueron leídos exitosamente.

Todo parece estar en su lugar, pero recibo ese error y poca explicación de SharePoint sobre cómo resolverlo.

Se agradece cualquier ayuda para encontrar una solución.

Respuesta

8

Lo descubrí.

El mensaje de error es el que desde el archivo .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> 

El problema es que el archivo .webpart original fue creado en un sistema de 32 bits con las extensiones de Visual Studio para WSS instalados.

Sin embargo, como ahora estoy en una máquina de 64 bits VSEWSS no está disponible, y creo que los resultados en el GUID anterior no se sustituirán ya que no estoy usando esas herramientas de implementación.

Reemplazar el GUID con el nombre de tipo completo funciona.

Así que si se encuentra con el mensaje de error desde el nodo importErrorMessage, a continuación, comprobar que el nodo de tipo en el archivo .webpart se parece más a esto (ejemplo no relacionado):

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

Esto está en el formato: Clase, Espacio de nombres, Versión, Cultura, PublicKey

Puede obtenerlo fácilmente del archivo web.config asociado con su instancia de SharePoint, ya que estará en la lista de controles seguros.

0

¿Ha reciclado su proceso de trabajo o restablecido IIS?

+0

Lo intentaré. Yo no. –

+0

No ... no funcionó. Mismo error y la misma entrada de archivo de registro. –

1

ahora tengo una respuesta para un problema similar al de abajo:

Cuando intento añadido una nueva parte WEP a la página, a continuación, SharePoint me muestran un mensaje de error, dime - No se puede importar mi parte web , este mensaje de error se define en el archivo .webpart.

Así que traté de agregar algunas partes web originales en la página, una extraña apariencia de pregunta, algunas de ellas pueden agregarse, algunas de ellas no se pueden agregar.

Después he seguido el código de mi pieza de la tela y los anaylsis, he encontrado la razón:

Código antiguo para la web parte ProjectInfo (mi web nombre de la pieza) es:

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

Detener ahora, Pensé que tal vez el problema de orden de inicio de la página web. Como carga de la página web AS control de parte web, la función constructrue ProjectInfo() se ejecutará al principio. En realidad, la página web no ha terminado su init. Para el momento.

así que hice una prueba. En primer lugar, puse una buena web en la página, está bien. entonces, intento poner la parte web en la página que no puede agregarse ahora. ~~ OK !! Está funcionando ... porque la página ya está iniciada. terminado.

Ok! Corregí mi código:

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

Después de prueba, el mensaje de error did't happed nuevo .. LoL ~~

Esperanza explica esto le ayudará.

0

Solucionado el mío.

que estaba recibiendo este error:

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

"no puede importar parte web ..."

El problema era: GUID no coincidentes

Comprobar si el GUID de la clase de elemento Web, y en la clase .xml y en .webpart son iguales.

Estaba copiando y pegando código de otras fuentes de webparts. (El documento Mutliple carga Wepart en Codeplex) y se olvidó de corregir las guías.

0

También he experimentado este error cuando los ensamblados en el GAC al que hacía referencia mi parte web, estaban firmados por un archivo de clave de nombre fuerte diferente al que esperaba. Descubrí esto cuando decidí actualizar estos archivos DLL. Al insertarlo en el GAC noté que había 2 entradas para la misma DLL pero tenían diferentes Tokens de clave pública

0

Obtuve este error cuando creé un elemento web de la clase base y luego heredé una clase derivada de él. La clase base estaba bien, pero la clase derivada falló cuando intenté agregarla a una página web con el mismo error que la publicación original. En mi caso he tenido que añadir un modificador pública a la clase:

public class DerivedWebPart : BaseWebPart 

También he añadido un constructor de la clase derivada de llamar a la clase base uno - aunque creo que no es necesario que esto realmente:

public DerivedWebPart() : base() 
    { 
    } 
6

hemos tenido este mismo problema y encontró que el constructor de nuestra parte de alma estaba siendo llamado por el WebPartImporter y dentro del constructor que estábamos haciendo SPSecurity.RunWithElevatedPrivileges.

Por alguna razón, el WebPartImporter no puede manejar esto. Entonces, simplemente cambiamos nuestro código del constructor a OnInit (donde realmente pertenecía) y todo está bien.

+1

¡Esta respuesta es un salvavidas! Llegué al mismo problema con un elemento web al que le había dado System.Net.WebPermission. Había agregado el atributo [System.Net.WebPermission (System.Security.Permissions.SecurityAction.Demand, Unrestricted = true)] a la clase como un todo en lugar del método particular que necesitaba el permiso. – ngm

1

He visto esta anomalía varias veces sin una buena resolución.

Compruebe que su Asamblea, Espacio de nombres, Nombre de clase sea correcto EN TODAS PARTES. Esto me ha colgado más de una vez.

Asegúrese de tener una entrada válida de SafeControls.

Asegúrese de que su archivo .webpart es válido (el que SharePoint cree para usted si puede)

Si está absolutamente seguro de que todo es correcto, bueno, entonces usted está atascado en un lugar que he estado varias veces. Lo único que se me ocurre es que VS está compilando mal el ensamblaje. La ÚNICA solución que he encontrado es crear un nuevo proyecto VS y configurarlo como lo necesita, luego copiar el texto de sus viejos archivos CS en sus nuevos archivos CS ... no copiar los archivos ellos mismos ... el objetivo es tener todo fresco.

Esto ha funcionado para mí. Buena suerte.

0

Descubrí que el mío no importó la primera vez, pero si hacía clic en "Nuevo" y lo añadía, funcionaría.

A partir de ahí agarré una copia del XML y lo guardé en mi proyecto. La parte web funcionó muy bien después de eso.

Solo me llevó DÍAS llegar a este punto. Una gran cantidad de tiempo perdido.

0

Tuve un problema muy similar a esto, pero las guías no eran el problema: mi webpart no tenía el atributo CLSCompliannt establecido en falso. De la misma manera:

namespace MyNamespace 
{ 

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

    } 
} 
2

Todas las grandes sugerencias. Mi problema era único y tonto: había implementado la solución en la primera aplicación web pero no en la segunda. Sin embargo, SharePoint todavía me permitió activar la función en la Colección de sitios de la segunda aplicación web (no estoy seguro de por qué). Esto significaba que la segunda aplicación web no tenía una entrada de control seguro en este archivo Web.config (y estaba comprobando estúpidamente el primer Web.config).

Por lo tanto, compruebe que está buscando la aplicación web/web.config correcta.

Cuestiones relacionadas