STSDEV: aggiungere files alla CONFIG folder
Oggi mi sono appollaiato sotto il sole dell'alta Toscana con l'intenzione di preparare un po' di materiale per la SharePoint Conference di ottobre.
Ho riorganizzato un po' di esempi, completato qualche snippet di codice lasciato da un po' di tempo nei "todo" di outlook e poi mi sono dedicato al packaging per la sessione su STSADM che terrò con Igor.
Ovviamente non svelo nulla (:-P) ma, giacchè sono tuttora appollaiato sotto la luna dell'alta Toscana, vi scrivo un piccolo tip.
L'esigenza è stata quella di creare una solution SharePoint in grado di effettuare il deploy di una custom stsadm extension. Il che si riduce, per farla breve, alla distribuzione di un assembly in GAC (e sin qui nessun problema) e alla copia di un file in [12]\CONFIG.
Il meccanismo di packaging in solutions consente entrambe queste operazioni (definendo i relativi elementi Assembly e RootFile nel manifest della solution, e ovviamente includendo i file nel pacchetto generato):
<Solution ... >
<RootFiles>
<RootFile Location="CONFIG\stsadmcommands.Spc2008.xml" />
</RootFiles>
<Assemblies>
<Assembly Location="Spc2008.StsAdmExtensions.dll" DeploymentTarget="GlobalAssemblyCache" />
</Assemblies>
</Solution>
Purtroppo, però, STSDEV non è in grado di inserire file nella directory CONFIG.
Ponendo come presupposto che:
- Tutte le mie altre demo sono basate su progetti creati con STSDEV ... e vorrei mantenere un minimo di omogeneità almeno con me stesso :-)
- STSDEV è un tool eccellente, sia per funzionalità che per facilità di estensione
- STSDEV è corredato da codice sorgente
tutto sommato l'idea di metter su una patch non è così tanto campata per aria.
Step by step, la patch è costituita da:
1) In Globals.cs, definizione di un nuovo campo String all'interno della classe stsdev.Globals, inizializzato con il percorso della directory CONFIG:
public readonly static string ConfigFolder = RootFilesFolder + @"\CONFIG";
2) In CabDdfBuilder.cs, modifica del processo di generazione del file DDF (alla base della successiva creazione del pacchetto WSP), rilassando il controllo sull'esistenza delle directory nel ramo di progetto per includere anche RootFiles\Config:
if (Directory.Exists(Globals.IsapiFolder) || Directory.Exists(Globals.ResourcesFolder) || Directory.Exists(Globals.ConfigFolder))
3) In ManifestBuilder.cs, modifica del processo di generazione del manifest della solution, rilassando il controllo sull'esistenza delle directory nel ramo di progetto per includere anche RootFiles\Config:
if (Directory.Exists(Globals.IsapiFolder) || Directory.Exists(Globals.ResourcesFolder) || Directory.Exists(Globals.ConfigFolder))
Rebuild, test e via :-)
Ah, per inciso.
L'avete visto, no, che Ted Pattison (creatore - tra l'altro - di STSDEV) terrà una sessione proprio sulla sua creatura ?