Von DataIslands und (XML) Manifests in VSTO

In einem älteren Blog-Eintrag hatte ich schon einmal davon berichtet, wie man sich das Manifest aus einer dokumentzentrischen VSTO-Lösung herausziehen kann. Warum man das braucht? Ganz einfach. VSTO geht davon aus, daß die Customization Assembly und das Dokument im gleichen Ordner liegen. Beim Anlegen einer dokumentzentrischen VSTO-Lösung in Visual Studio wird in das Dokument ein Manifest geschrieben, in dem der Pfad zur und der Name der Assembly hinterlegt wird. Will man jetzt bspw. das Dokument auf dem SharePoint ablegen und die Assembly zentral auf einem Server zur Verfügung stellen, so muß der Pfad angepaßt werden. Dazu gibt es die ServerDocument Klasse in VSTO.

Oder aber ein Tool auf MSDN: Der Application Manifest Editor. Dazu gibt es einen Artikel im Developer Center.

Der Editor liegt im Quellcode vor (C#) Leider haben sich im Code ein paar Fehler eingeschlichen.

So müßte es im Handler importManifestToolStripMenuItem_Click statt
   document = new ServerDocument(documentPath, true)
nun
document = new ServerDocument(documentPath);
heißen.

Desweiteren sollte in Utilities.cs unter internal interface IStorage der out-Parameter der beiden folgenden Methoden von Typ UCOMIStream in ComTypes.IStream geändert werden:

  [PreserveSig]
  int CreateStream([MarshalAs(UnmanagedType.LPWStr)] string wcsName,
STGM grfMode,
int reserved1,
int reserved2,
out ComTypes.IStream stream);  

  [PreserveSig]
int OpenStream([MarshalAs(UnmanagedType.LPWStr)] string wcsName,
IntPtr reserved1,
STGM grfMode,
int reserved2,
out ComTypes.IStream stream);

Damit kann man das Projekt unter VS 2005 korrekt übersetzen. Es ergibt eine Console Applikation + User Interface und man kann Manifests auslesen, ändern und abspeichern sowie DataIslands - also im Dokument gespeicherte Daten - ansehen.

Das Tool funktioniert mit VSTO 2.0 / Office 2003 und (zumindest bei mir) auch mit dem Juni CTP von VSTO 3 und Office 2007.