Pregunta

Tengo un elemento web que he desarrollado y si lo instalo manualmente, está bien.

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

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

Lo pertinente 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 conciso:"No se puede importar el elemento web".

Lo verifiqué y mi .dll está registrado como seguro, está en el GAC, la función está activada y los elementos web aparecen en la biblioteca de elementos web con todas las propiedades correctas que muestran que los archivos de elementos web se leyeron correctamente.

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

Se agradece cualquier ayuda para encontrar una solución.

¿Fue útil?

Solución

Lo averigué.

El mensaje de error es el del 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 se creó en un sistema de 32 bits con Visual Studio Extensions para WSS instalado.

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

Reemplazar el GUID con el nombre de tipo completo funciona.

Entonces, si encuentra el mensaje de error de su nodo importErrorMessage, verifique que su nodo de tipo en el archivo .webpart se parezca más a este (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, clave pública

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

Otros consejos

Tuvimos el mismo problema y descubrimos que WebPartImporter estaba llamando al constructor de nuestro elemento web y dentro del constructor estábamos haciendo SPSecurity.RunWithElevatedPrivileges.

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

Todas excelentes sugerencias.Mi problema era único y tonto:Implementé la solución en la primera aplicación web pero no en la segunda.Sin embargo, SharePoint aún 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 segura en este archivo Web.config (y estuve revisando estúpidamente el primer Web.config).

Por lo tanto, verifique que esté viendo la aplicación web/web.config correcta.

Ahora obtengo una respuesta para un problema similar al siguiente:

Cuando intento agregar un nuevo elemento web a la página, Sharepoint me muestra un mensaje de error, dígame: No puedo importar mi elemento web, este mensaje de error se define en el archivo .webpart.

Así que intenté agregar algunos otros elementos web en la página. Una pregunta con una apariencia extraña, algunos de ellos se pueden agregar, otros no se pueden agregar.

Después de rastrear el código de mi elemento web y analizarlo, encontré el motivo:

El código antiguo para el elemento web ProjectInfo (el nombre de mi elemento web) 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]; 
        .....
 }

Detente ahora, pensé que tal vez sea el problema del orden de inicio de la página web.Como control del elemento web de carga de la página web, la función constructrue ProjectInfo() se ejecutará al principio.En realidad, la página web no ha finalizado su inicio.Para el momento.

así que hice una prueba.Lo primero que pongo es una buena web en la página, está bien.luego, intento colocar el elemento web en la página que no se puede agregar en este momento.~~ ¡¡Está bien!!Está funcionando... porque la página ya se inició.finalizado.

¡De acuerdo!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 realizar la prueba, el mensaje de error no volvió a aparecer.jajaja ~~

Espero que esta explicación te ayude.

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

Verifique que su ensamblaje, espacio de nombres y nombre de clase sean correctos 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 sea válido (deje que SharePoint lo cree por usted si puede)

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

Esto ha funcionado para mí.Buena suerte.

¿Ha reciclado su proceso de trabajo o reiniciado IIS?

Resuelto el mío.

Recibí 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 se puede importar el elemento web..."

El problema era:GUIDS no coincidentes

Compruebe si el guid en la clase webpart y en las clases .xml y .webpart son los mismos.

Estaba copiando y pegando código de otras fuentes de elementos web.(Carga de documentos múltiples Wepart en Codeplex) y olvidé arreglar las guías.

También experimenté este error cuando los ensamblados en el GAC al que hacía referencia mi elemento web estaban firmados con un archivo de clave de nombre seguro diferente al que esperaba.Descubrí esto cuando decidí actualizar estas 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.

Recibí este error cuando creé un elemento web de 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 tuve que agregar un público modificador a la clase:

public class DerivedWebPart : BaseWebPart

También agregué un constructor en la clase derivada para llamar a la clase base, aunque creo que no deberías necesitar esto realmente:

    public DerivedWebPart() : base()
    {
    }

Tuve un problema muy similar a este, pero las guías no eran el problema:mi elemento web no tenía el CLSCompliannt atributo establecido en falso.Al igual que:

namespace MyNamespace
{

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

    }
}

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

Desde allí tomé una copia del XML y la guardé en mi proyecto.El elemento web funcionó muy bien después de eso.

Sólo me tomó DÍAS llegar a este punto.Mucho tiempo perdido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top