ClickOnce und OracleClient…

... sind Dinge, mit denen ich mich derzeit auf der Arbeit rumschlage. 1 Ich entwickle derzeit eine Client-Anwendung für interne Zwecke, welche auf ca. 10 Rechnern laufen soll. Damit man diese nun nicht alle aufwendig manuell installieren bzw. später updaten muss habe ich mich für ClickOnce als Deployment-Lösung entschieden. Ich habe damit bereits gute Erfahrungen bei  einer anderen Anwendung gemacht, die ich regelmäßig anpasse und neu verteile. Diese neue Anwendung soll nun allerdings im Gegensatz zur vorherigen mit einer Datenbank kommunizieren, und zwar genauer gesagt mit einer Oracle 10g. Gesagt, getan: Als erstes verweise ich in meiner Anwendung auf den Namensraum "System.Data.OracleClient". Beim Start der Anwendung bekomme ich allerdings gleich beim ersten Verbindungsversuch folgende Meldung zu sehen: Will man nun sein Programm starten stößt man beim Verbindungsaufbau auf den nächsten Fehler.2 Im Gegensatz zu den meisten anderen  Datenbanken erfordern Oracle Datenbanken leider die Oracle eigene Clientsoftware, denn der System.Data.OracleClient macht nichts weiter als mit genau diesem Client zu kommunizieren. 3 Nun muss man sich den zu seiner Datenbank-Version passenden OracleClient runterladen und installieren. Hat man dies ordnungsgemäß getan sollte man seine Anwendung auch starten können. Das ist für mich allerdings nur eine suboptimale Lösung, denn ich will ja mein Programm via ClickOnce ausrollen und keine separate manuelle Installation des OracleClients auf jedem Rechner vornehmen. Man könnte das ausrollen des Clients via Software-Verteilung vornehmen (wenn man eine hat), aber es gibt noch eine viel elegantere Lösung. Um jetzt den ClickOnce Vorteil zu behalten müssen wir also die Clientsoftware in unsere Software "Veröffentlichung" (Publish) mit einbeziehen. Das geht leichter als man denkt, denn das ganze Geheimnis der Oracle-Clientsoftware sind lediglich 4 Dateien, welche man einfach nur in sein Projekt aufnehmen braucht. 4 Die werden allerdings nicht als Verweis hinzugefügt, sondern einfach als normaler Content ins Projekt gezogen. Sie müssen hier unbedingt im Root des Projektes liegen und beim Build mit ins Ausgabeverzeichnis kopiert werden (Eigenschaften), weil sie von der Anwendung beim Start im selbigen Ordner gesucht werden wie die Anwendungs-EXE.5 Als nächstes gilt es noch, falls nicht bereits automatisch geschehen, diese Dateien zu markieren, damit sie beim Publish mit verteilt werden.(Settings=>Publish) Bei der Auswahl der Oracle-Clientsoftware gilt es übrigens zu beachten die 4 Dateien aus dem sogenannten "BASIC" Paket zu nehmen und nicht die aus dem "BASIC LITE". Die "LITE"-Versionen verursachten folgenden Fehler: instant_client_basic_lite_fehler Nach dem nächsten Publish sollte die Anwendung dann startbar sein. War leicht oder? Nagut, einen kleinen Wermutstropfen gibt es natürlich noch. Eine der vier ominösen DLLs ist schlappe 104 MB groß, d.h. das Publish-Paket ist nun nicht mehr das kleinste, was allerdings bei uns im LAN keine Rolle spielt. In diesem Zusammenhang war dieser Beitrag sehr hilfreich und sei hiermit auch sehr zu empfehlen. Ach übrigens: Der GAC befindet sich in Windows XP unter "C:\Windows\Assembly" und die "gacutil.exe" ist unter "C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Bin\". In diesem Sinne, happy coding 🙂