PDA

Vollständige Version anzeigen : Modul/Klasse in verschiedenen Projekten nutzen


accelle
25.01.2008, 08:07
Hallo zusammen,

ich nutze Visual Studio 2005 / 2008 und bin öfter in der Situation, dass ich bestimmte Klassen oder Module in verschiedenen Projekten nutze.

Da in den Projekten immer wieder Ergänzungen an den Klassen/Modulen notwendig sind, kann ich die nicht einfach aus einer zentralen Bibliothek in mein Projekt kopieren, sondern brauche eine zentrale Ablage, auf die verschiedene Projekte zugreifen und diese bei Veränderungen wieder in die Bibliothek zurückschreiben. Andere Projekte, die das gleiche Modul nutzen, sollen dann beim nächsten Start (noch schöner sofort) automatisch das aktualisierte Modul bekommen.

Wer kann mir sagen wie das geht?

Danke vorab und herzliche Grüße
Peter

Noodles
25.01.2008, 09:02
Wenn man eine fertige ( getestet ) Klasse hat und diese erweitern will ( für ein bestimmtes Projekt ), dann sollte man davon ableiten.

corvusgravis
02.02.2008, 00:36
Hallo Peter,

Oft verwendeten Code in einer zentralen Bibliothek ablegen ist sehr gut. Bibliotheken heißen auf Englisch Library und weil einem/mehreren Programm/en zur Laufzeit (dynamic) auf so eine Bibliothek ein Zugriff (link) gewährt werden kann heißt so eine Bibliothek Dynamic Link Library - kurz: DLL. Und weil das so cool ist gibt's ja massenhaft davon.

Erstell mal ein neues Projekt als DLL und füg dort deinen Code ein. Ich weiß nicht ob du in einer DLL auch Module reinpacken kannst mit Klassen geht das auf jeden Fall. Wenns mit Modulen nicht geht pack die Methoden der Module in Klassen - Module sind sowieso out. Kompiliere und speicher das DLL-Projekt.

In jedem anderen Projekt kannst du jetzt einen Verweis auf diese DLL-Datei setzen. Das müßte gehen indem du mit der rechten Maustaste im Projektexplorer auf das Projekt klickst und im Kontextmenü irgendwas wie "Verweis auf Datei" anklickst und dann die DLL-Datei auswählst. Dann mußt du noch den/die Namespace/s den/die du in der DLL verwendest mit #using in das Projekt einbinden.

!!! Wenn du Änderungen an der DLL vornimmst mußt du sie neu kompilieren da die Projekte auf die kompilierte DLL-Datei zugreifen !!!

...und weil das mühsam ist:

Öffne ein Projekt und entferne den Verweis auf die DLL falls vorhanden. Öffne im selben Fenster das DLL-Projekt. Somit hast du eine Projektgruppe mit zwei Projekten. Die Projektgruppe wird als eigene Datei abgespeichert und beinhaltet lediglich Verweise auf die einzelnen Projekte. Du kannst die Projekte weiterhin wie gewohnt einzeln öffnen oder beide gleichzeitige eben über die Projektgruppe.

Setze in deinem Projekt (nicht im DLL-Projekt sondern in dem das auf die DLL zugreifen soll) einen Verweis auf das DLL-Projekt (!!!NICHT auf die kompilierte DLL-Datei!!!). Das geht auch irgendwie über den Projektexplorer und die rechte Maustaste und müßte irgendwas wie "Verweis auf Projekt" heißen.

Jetzt kannst du an beiden Projekten gleichzeitig arbeiten und Änderungen am DLL-Code werden sofort und ohne die DLL neu kompilieren zu müssen übernommen. Beim Debuggen springt die Ausführen bei einem Aufruf eines Objekts aus der DLL vom normalen Projekt sofort in das DLL-Projekt und du kannst dort weiter debuggen bzw. Änderungen vornehmen.

Hilft dir das weiter?

Viel Erfolg,
Andreas

Carsten
29.04.2008, 08:34
Hmm...
Das hört sich ja schon ganz cool an...
Ich stehe vor einem ähnlichen Problem.
Mein AddIn (Excel) verwendet eine externe DLL. Da der Hersteller regelmäßig Programmupdates liefert gibt es immer einen neuen Release-Ordner im Programme-Verzeichnis. Dieser hat natürlich für jedes Release eine neue Bezeichnung.
Jetzt stehe ich vor dem Problem, dass ich diesen Ordner natürlich noch nicht kenne, weil ich nicht weiß, welches Release auf dem Zielrechner iinstalliert ist.

Kann ich irgendwie die Verweise auf die DLLs zur Laufzeit hinzufügen?
Ich stelle mir das so vor, dass dass Release-Verzeichnis beim ersten Öffnen des AddIns per Folder-Dialog festgelegt wird und dann in der Registry abgelegt wird.
Dann könnte ich bei jedem weiteren Öffnen des AddIns die dort gespeicherten DLLs einbinden.

Geht das?

Gruss Carsten