AddIn


Hier die Materialien zum Vortrag Extensiblility bei der Usergroup Paderborn (Powerpoint + 3 Demo Projekte).

Externe Erweiterbarkeit von Programmen

Scripting

image Das Demo zeigt die Einbettung von IronPython in C# und die Manipulation der C# Daten durch IronPython Scripte.

Links:

Homepage http://ironpython.codeplex.com/

IronPython Cookbook http://www.ironpython.info/index.php/Main_Page

Dynamische Compilierung

image Das Demo zeigt (kurz) die Erzeugung eines In Memory Assemblies via CodeDOM

Links:

Dynamic Source Code Generation and Compilation http://msdn.microsoft.com/en-us/library/650ax5cx.aspx

QuickReference
http://msdn.microsoft.com/en-us/library/f1dfsbhc.aspx

Plugins [Managed Extensibility Framework (MEF)]

image Das Demo zeigt eine Reihe von Techniken für dynamisch komponierbare Anwendungen auf Basis von MEF.

Links:

Homepage http://mef.codeplex.com

Contrib http://mefcontrib.codeplex.com/

Glen Block http://blogs.msdn.com/gblock

Deutscher Übersichtsartikel
http://msdn.microsoft.com/de-de/library/ee332203.aspx

Wann welche Art von Erweiterbarkeit?

Scripting für Ad hoc Erweiterungen (Makro aufzeichnen und anpassen), gut zugänglich für Poweruser

Dynamische Compilierung bei parametrisierten Snippets z.B. mathematische Funktionen oder Filter (Ausführung ist wesentliche häufiger als Änderung)

Plugins nutzen als mittel die Anwendung flexibel zu halten und Teilfunktionalitäten durch Externe zur Verfügung zu stellen

Advertisements

System.AddIn erlaubt es einem AddIns zu erstellen. Allerdings erzeugt der eigentlich sehr pracktische PipelineBuilder Code der nicht ohne weiteres funktioniert. Hier mal eine Reihe von Dingen die man prüfen sollte wenn die AddIns nicht gefunden werden:

  • AddInStore.Update/Rebuild gibt ein String Array mit Warnungen zurück. Unbedingt auswerten!
  • Bei Problemen als erstes immer das output Directory sofort löschen ( bis auf die *.VSHost.exe, die ist gelockt )
  • Das Contract Interface muss mit Contract enden, in dem AddInView und im HostView fehlt dann die Endung.
  • Der Contract muss sowohl das Contract Attribute haben als auch von IContract erben
  • Das AddIn sollte das AddIn Attribute tragen sonst kann es nur über den Type gefunden werden.
  • Referenzen auf HostView oder AddInView dürfen niemals Local Copy auf true haben.
  • Die Directorystruktur mit Addins, Contracts usw muss strikt eingehalten werden
  • Die vom Assemblynamen der vom Pipelinebuilder erzeugten Projekte heißen alle template.dll. Unbedingt ändern.
  • Fehlermeldungen unterscheiden sich häufiger mal nach dem 2. Build.

Wenn nichts geht, mal alle obj Verzeichnisse  und natürlich das output Verzeichnis von Hand löschen.

Für meinen Geschmack viel zu viele Möglichkeiten Fehler zu machen. Ich gebe zu der Einstieg in System.AddIn ist nicht gerade einladend. Ich bin mir auch noch nicht sicher ob sich der Aufwand wirklich lohnt, bisher konnte ich recht gut auf Versionierung verzichten und habe halt eine Neucompilierung bei neuer Schnittstelle gefordert. Geht solange es nur eine Handvoll Plugin Bauer gibt.

Noch wird mein AddIn nicht gefunden. Morgen weitersehen 😦