c# - Error de SharePoint: "No se puede importar el elemento web"
moss web-parts (11)
Tengo un elemento web que he desarrollado, y si instalo manualmente el elemento web, está bien.
Sin embargo, cuando he empacado el elemento web siguiendo las instrucciones en este sitio web como guía, consulte: http://www.theartofsharepoint.com/2007/05/how-to-build-solution-pack-wsp.html
Aparece 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 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 escueto: "No se puede importar el elemento web".
Lo he comprobado 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 webpart se leyeron correctamente.
Todo parece estar en su lugar, sin embargo, recibo ese error y poca explicación de SharePoint sobre cómo resolverlo.
Cualquier ayuda para encontrar una solución es apreciada.
¿Ha reciclado su proceso de trabajo o restablecido IIS?
Ahora recibo una respuesta para un problema similar al siguiente:
Cuando trato de agregar una nueva parte wep a la página, entonces sharepoint muéstrame un mensaje de error, dime - No puedo importar mi parte web, este mensaje de error se define en el archivo .webpart.
Así que traté de agregar algunas partes web más originales en la página. Una apariencia extraña de una canción, algunas de ellas pueden agregarse, algunas de ellas no pueden agregarse.
Después de rastrear el código de mi parte web y analizarlos, encontré el motivo:
Código anterior para el elemento web ProjectInfo (el nombre de mi parte 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];
.....
}
Parar 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.
¡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 la prueba, el mensaje de error no volvió a pasar ... LoL ~~
Espero que esta explicación te ayude.
Solucionado el mío.
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 se puede importar webpart ..."
El problema era: GUIDS no coincidentes
Comprueba si el guid en la clase webpart, y en la clase .xml y en .webpart son iguales.
Estaba copiando el código de otras fuentes de webparts. (El documento Mutliple carga Wepart en Codeplex) y se olvidó de corregir las guías.
También experimenté 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 diferente y diferente a lo que esperaba. Descubrí esto cuando decidí actualizar estos archivos DLL. Al insertarlo en el GAC noté que había 2 entradas para el mismo archivo DLL pero tenían diferentes tokens de clave pública
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, tuve que agregar un modificador público 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ía necesitar esto realmente:
public DerivedWebPart() : base()
{
}
Tuvimos este mismo problema y descubrimos que el constructor de nuestro elemento web estaba siendo llamado por el WebPartImporter y dentro del constructor 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.
He visto esta anomalía varias veces sin una buena resolución.
Verifique que su Assembly, Namespace, Class name 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úrate de que tu archivo .webpart sea válido (deja que SharePoint lo cree por ti si puedes)
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 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 me ha funcionado. Buena suerte.
Tuve un problema muy similar a esto, pero las Guids no eran el problema: mi webpart no tenía el atributo CLSCompliannt
establecido en falso. Al igual que:
namespace MyNamespace
{
[CLSCompliant(false)]
[Guid("...")]
public class MyWidget : MyWebPartBaseClass
{
}
}
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.
Todas las buenas 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 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, vuelva a verificar que está buscando la aplicación web / web.config correcta.
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 original .webpart 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 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.
Entonces, si encuentra el mensaje de error de su nodo importErrorMessage, entonces verifique que su 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 tiene el formato: Clase, Espacio de nombres, Versión, Cultura, PublicKey
Puede tomarlo fácilmente del archivo web.config asociado con su instancia de SharePoint, ya que estará en la lista de controles seguros.