Dicho queda que si alguien llega a este post con el mismo caso que voy a relatar (y aporta pruebas de ello), me comprometo a regalarle un llavero del Parque Güell.
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">
<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>
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.
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.