Veamos: en un proyecto cualquiera usamos soluciones sandboxed (WSP's que viven en la Solution Gallery de nuestra colección de sitios: _catalogs/solutions) que contienen una plantilla de web. Estos WSP los obtenemos haciendo "Guardar sitio como plantilla" y constituyen el "código fuente" del sitio. El ciclo es: despliego el WSP, creo un sitio con la plantilla de sitio contenida en el WSP, hago las modificaciones manuales pertinentes y guardo de nuevo el sitio a WSP. Todo esto sin abrir Visual Studio. Maravilloso.
...hasta que llegamos a la novena iteración del ciclo. La solución sandboxed se sube, se activa, procedemos a crear el sitio y ¡crac! rotura fibrilar con el siguiente diagnóstico:
11/05/2010 12:31:38.57 powershell.exe (0x22A8) 0x20B8 SharePoint Foundation General 72lu High Cannot find doc C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\Template\global\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\v4.master 11/05/2010 12:31:38.57 powershell.exe (0x22A8) 0x20B8 SharePoint Foundation General 8yrn Medium Instantiating module "_catalogsmasterpage_global": File could not be added at URL "v4.master": Error 477317568
11/05/2010 12:31:38.57 powershell.exe (0x22A8) 0x20B8 SharePoint Foundation General 8e2s Medium Unknown SPRequest error occurred. More information: 0x80070002
11/05/2010 12:31:38.96 powershell.exe (0x22A8) 0x20B8 SharePoint Foundation Feature Infrastructure 889y High The element of type 'Module' for feature 'XXXXXXXXXModules' (id: 70a2c4f1-8cbf-4e3b-8d52-120e5be61a77) threw an exception during activation: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
Feo, ¿verdad? Error al desplegar el fichero v4.master y el origen parece ser una ruta que contiene todas las contrabarras del universo y más. ¿Alguien ha contado cuántas? 256. ¿Alguno ve la relación cabalística? Novena exportación del sitio; 2 ^ (9 - 1) = 256. ¿Será posible? Afortunadamente guardo las versiones de los WSP anteriores y puedo investigar los cambios. Abro el WSP y localizo en el Elements.xml de la susodicha feature XXXXXXXXXModules un elemento <Module> del estilo:
<Module Name="_catalogsmasterpage_global" HyperlinkBaseUrl="http://xxxxxxxxx/" Url="_catalogs/masterpage" RootWebOnly="FALSE" Path="Files\_catalogs\masterpage">El metadato "MetaInfo" contiene una ristra de pares nombre/valor que se provisionarán en la colección Properties del SPListItem correspodiente al fichero desplegado. Ahí vemos como la propiedad "vti_setuppath", que indica la ruta relativa donde encontrar el fichero físico para un templated document (como parece ser nuestro caso), contiene ese path relativo con las 256 contrabarras. Y comparando con los WSP antiguos se corrobora como, a cada nueva exportación, el número de contrabarras se duplica. Hasta que por fin, irremediablemente, se supera lo que parece ser el tamaño máximo permitido. Pasmante.
<File Url="v4.master" Type="GhostableInLibrary" Path="v4.master">
<Property Name="ID" Value="2" />
<Property Name="ContentTypeId" Value="0x01010500AA46D280A9395F49A0AD56DEF3BFAA2F" />
<Property Name="ContentType" Value="Master Page" />
<Property Name="_ModerationStatus" Value="0" />
<Property Name="FileDirRef" Value="xxxxxxxxxxx" />
<Property Name="FSObjType" Value="0" />
<Property Name="FileLeafRef" Value="v4.master" />
<Property Name="MetaInfo" Value="2;#vti_parserversion:SR|14.0.0.4762
Order:SW|200.000000000000

vti_folderitemcount:IW|0
FSObjType:SW|0
FileDirRef:SW|
MyWork/_catalogs/masterpage
vti_charset:SR|utf-8
vti_author:SR|SHAREPOINT\\system
vti_setuppath:SR|global\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\v4.master

UIVersion:SW|4
MetaInfo:SW|2;#vti_parserversion:SR|14.0.0.4762\r\nvti_folderitemcount:IR|0\r\nvti_charset:SR|utf-8\r\nvti_author:SR|SHAREPOINT\\\\administrator\r\nvti_setuppath:SR|global\\\\v4.master\r\nUIVersion:SR|4\r\nvti_cachedneedsrewrite:BR|false\r\nvti_generator:SR|Microsoft SharePoint\r\nvti_foldersubfolderitemcount:IR|0\r\nvti_modifiedby:SR|SHAREPOINT\\\\administrator\r\nvti_cachedhastheme:BR|false\r\nvti_cached
customprops:VX|vti_title\r\nContentTypeId:SW|0x010105001BB704A689F80A4D8AF430B26FD34F6C
\r\nvti_cachedtitle:SR|<asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server"/>\r\nvti_metatags:VR|HTTP-EQUIV=X-UA-Compatible IE=8 GENERATOR Microsoft\\\\ SharePoint progid SharePoint.WebPartPage.Document HTTP-EQUIV=Content-Type text/html;\\\\ charset=utf-8 HTTP-EQUIV=Expires 0\r\nvti_title:SR|<asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server"/>\r\nvti_cachedbodystyle:SR|<body scroll="no" onload="if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();" class="v4master">\r\n
vti_cachedneedsrewrite:BR|false
vti_generator:SR|Microsoft SharePoint
vti_foldersubfolderitemcount:IW|0
vti_cachedhastheme:BR|
false
vti_cachedcustomprops:VX|vti_title
vti_modifiedby:SR|
SHAREPOINT\\system
ContentType:SW|Master Page
ContentTypeId:SW|0x01010500AA46D280A9395F49A0AD56DEF3BFAA2F

FileLeafRef:SW|v4.master
vti_cachedtitle:SR|<asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server"/>
vti_metatags:VR|HTTP-EQUIV=X-UA-Compatible IE=8 GENERATOR Microsoft\\ SharePoint progid SharePoint.WebPartPage.Document HTTP-EQUIV=Content-Type text/html;\\ charset=utf-8 HTTP-EQUIV=Expires 0
vti_title:SR|<asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server"/>
vti_cachedbodystyle:SR|<body scroll="no" onload="if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();" class="v4master">
" />
<Property Name="Order" Value="200.000000000000" />
<Property Name="UIVersion" Value="4" />
</File>
</Module>
Menuda papeleta. ¿Y ahora qué? Alguien diría: "Eso te pasa por ir a lo fácil; si hubieras trabajado con una plantilla de sitio en Visual Studio tendrías absoluto control sobre ella y no dependerías del proceso de exportación de SharePoint, que salta a la vista que tiene aún algún aspecto por pulir". Desoigo esos "telodijes" e intento buscar una solución que no implique rehacer todo de arriba a abajo.
¿Modificar el WSP? Fácil decirlo pero difícil llevarlo a la práctica. Visual Studio 2010 permite importar los WSP en proyectos. Así hago; el proyecto se importa correctamente y puedo ver el immenso listado de features y artifacts exportados. Pero al compilar:
Error 3 Both "_catalogsmasterpage_global" and "_catalogsmasterpage_global1" contain a file that deploys to the same Package location: XXXXXXXXXX_Feature2\Files\_catalogs\masterpage\v4.master C:\XXXXXXXX\Package\Package.package XXXXXXXXX
Cierto, en el WSP la página maestra v4.master se está provisionando dos veces. ¿Debo extirpar una de ellas? Empezar a meter bisturí en Visual Studio no parece que vaya a ayudarme a solventar el tema sino más bien lo contrario. Empieza a cobrar fuerza la opción de editar directamente el WSP, eliminar todas las contrabarras y volver a generarlo. Abrirlo es fácil, modificar el fichero Elements.xml también pero volver a construir el WSP ya no tanto. Para no eternizar esta entrada, enlazaré al post Cómo modificar y recrear manualmente un WSP en que encontraréis detalles sobre cómo hacerlo.
Resultado: con el WSP modificado se puede volver a activar la solución y crear un sitio. Hurra. Vamos a comprobar ahora si exportando de nuevo el sitio a WSP, SharePoint sigue en sus trece. Efectivamente; volvemos a tener dos contrabarras.
vti_setuppath:SR|global\\v4.master
Es decir, que dentro de otras 9 exportaciones volveremos a estar en las mismas. ¿Existe una forma de evitar esto? ¿Se corregirá en algún Cumulative Update o hotfix? ¿Significa mientras tanto que hay que prescindir de las soluciones sandboxed para sitios que deben modificarse muy a menudo? Preguntas que quedarán sin respuesta por lo menos a día de hoy en esta entrada.
2 comentarios:
Creo que me debes un llavero.. Ahh no, era por otra situacion, habia hecho una copia de seguridad de la masterpage y se guardo con el mismo path y estaba viendo exactamente el mismo error que comentas. Oye, te comento que con el iZarc puedes generar archivos .cab y pues como tu ya sabes nomas renombrarlos a .wsp. http://www.izarc.org/ Saludos desde Atlanta GA
Qué tal Citizen E,
bueno, entiendo que has venido aquí por el error
Error 3 Both "_catalogsmasterpage_global" and "_catalogsmasterpage_global1" contain a file that deploys to the same Package location
que no es estrictamente sobre el que versa este post. De todas formas, muchas gracias por dar feedback e informar sobre este iZarc, no lo conocía, pero sin duda lo probaré.
Saludos
Publicar un comentario