WPF-Anwendung und GAC

Hallo zusammen,

momentan versuche ich gerade ein .NET Programm in eine WPF-Browseranwendung zu packen. Leider ist das mein erster Versuch in dieser Richtung und ich bin leider völlig ahnungslos.

Nach langem Kampf habe ich nun den Server aufgesetzt und kann das Programm dort als WPF-Anwendung starten und es läuft. Auch auf anderen Maschinen auf denen das Programm inkl. aller Abhängigkeiten installiert ist, läuft es. Wenn ich nun das Programm von einer „nackten“ Maschine starte auf der nur das .NET Framework installiert ist, bekomme ich aber den Fehler, dass eine Assembly in den GAC installiert sein muss. Ich bin mir nicht mal sicher, ob diese Assembly im Programm irgendwo verwendet wird. Sie ist lediglich auf dem Server installiert und auch bereits im globalen Chache vorhanden.

Was mache ich falsch bzw. was habe ich noch nicht richtig verstanden?

Viele Grüße
Cybi

Hallo,

um welche Assembly handelt es sich denn? Ist es eine System-Assembly oder eine selbst erstellte? Wenn sie nicht im Programm verwendet wird, solltest du den Verweis aus dem Projekt entfernen. Es sei denn, die Assembly wird dynamisch geladen. Dann müsstest du die Stelle im Code identifizieren, wo das passiert.

Nico

Hi,

danke für deine Antwort. Es ist eine externe Assembly (das Paket Infragistics.Win). Wie bereits erwähnt existiert im Programm gar kein Verweis auf die fehlende Assembly, aber auf andere Assemblys des Pakets. Daher weiß ich auch nicht, wie ich den Verweis entfernen soll…

Cybi

Dann haben die anderen Assemblys vermutlich einen Verweis darauf. In dem Fall kannst du das anders herum machen - füge einen Verweis hinzu. Dadurch sollte die DLL ins Ausgabeverzeichnis kopiert werden, sodass sie beim Starten verfügbar ist.
Wenn du die DLLs in den GAC installieren willst, solltest du einen Installer erstellen: http://msdn.microsoft.com/en-us/library/dkkx7f79.aspx

Nico

Hi,

im GAC ist die dll bereits vorhanden. Das Zubinden habe ich auch schon versucht, mit derselben Vermutung, die du hier angestellt hast. Leider erfolglos. Der Fehler bleibt. Mittlerweile zweifle ich schon fast, dass der GAC überhaupt die Ursache ist und ob der Fehler nicht aus anderen Gründen geworfen wird…

Hm… dann kann ich dir leider auch nicht weiterhelfen.
Ich empfehle dir daher das Forum der Entwickler (http://www.infragistics.com/community/forums/). Die werden wohl am ehesten wissen, was ihre Software macht.

Nico

Auch daran hab ich schon gedacht :smile:
http://www.infragistics.com/community/forums/t/79233…

Hallo

okay, nun bin ich etwas weiter gekommen. Das Problem mit dem GAC habe ich behoben und die Anwendung läuft sogar. Problem ist nur, dass die Anwendung heruntergeladen wird und anschließend lokal ausgeführt wird.

Die Anwendung soll aber auf dem Server laufen, da im Programm Datenbankzugriffe stattfinden (die Datenbank läuft auf dem Server und nicht auf dem Client). Außerdem liegen weitere DLLs auf dem Server, die nur unter Umständen benötigt werden. Natürlich will ich nicht alle DLLs beim Start runterladen, sondern nur bei Bedarf.

Was muss ich tun, um das zu bewerkstelligen?

Viele Grüße
Alex

Hallo!
Du hast dann immer 2 Teile: Ein Teil, der am Client läuft (Oberfläche) und ein Teil, der am Server läuft (Datenzugriff).
Wenn Du den DB-Zugriff in „dem einen“ Programm machst, wird er immer am Client ausgeführt, wo er aber keine Datenbank hat.
Trenne Dein Programm also in einen Serverteil, mit dem die Clienthälfte dann z.B. per WCF kommuniziert.

Hört sich aber nicht nach einem „einfach so mal schnell“ an, sondern Du scheinst die ganze Architektur nicht auf Client/Server ausgelegt zu haben…

Gruß,
Martin

1 Like

Hallo,

danke für deine Antwort. Jetzt bin ich schonmal schlauer :smile:

Ja, die Architektur des Programms war nie auf Serveranwendung ausgelegt. Allerdings habe ich nur eine einzige Methode, die immer die Verbindung zur Datenbank aufbaut. Eventuell könnte man die entsprechend erweitern? Hättest du nen Link, wo die Sache mit der WCF-Kommunikation gut beschrieben ist?

Kann ich es irgendwie bewerkstelligen, dass benötigte dlls nur bei Bedarf vom Server heruntergeladen werden?

Viele Grüße
Alex

Hallo!
Im Netz gibt es haufenweise Tutorials zu WCF, bspw. hier: http://www.codeproject.com/Articles/406096/A-beginne…

Das Herunterladen von benötigten DLLs erst dann, wenn sie benötigt werden, ist nicht so einfach - ich wüsste keinen fertigen Mechanismus dafür.
Du kannst aber eine Click-Once-Installation für Deine (Client)Anwendung bauen, dann werden die nötigen Dateien jeweils von einem zentralen Server auf den Client heruntergeladen (und i.d.R. auch Updates praktisch automatisch eingespielt).

Gruß,
Martin