Hallo zusammen,
ich stehe gerade vor dem Problem beim Einsatz der aktuellen SQLite-Version eine x86 und x64 Variante meines Programms anbieten zu müssen. Die neue Version ist offenbar targetspezifisch, auch wenn es als 32 Bit kompiliert wird.
Das Programm unter 64 Bit Windows benötigt nur die statische system.data.sqlite.dll in der 32 Bit Version, das Programm unter 32 Bit Windows läuft nur mit der system.data.sqlite.dll in der dynmischen 32 Bit Version + der SQLite.Interop.dll.
Da ich mir meine Projektmappe nach x Versionsversuchen mit unterschiedlichen DLL-Version nicht komplett zerschießen möchte, folgende Frage:
Wie kann ich die drei DLLs in das Projekt einbinden, um, je nach Ausgabe (32 oder 64 Bit), die Anwendung mit den korrekten DLLs zu kompilieren und auch die korrekten DLLs im jeweiligen Ausgabeverzeichnis zu bekommen?
Edit: Zusätzlich kann die SQLite.Interop.dll auch nicht als Verweis hinzugefügt, sondern kann überhaupt nur als "vorhandenes Element" hinzugefügt werden ("es konnte kein Verweis auf.. hinzugefügt werden"). Diese wird dann wohl in jeder Version mitkopiert.
Hier nochmal etwas übersichtlicher:
Dev-Umgebung | x64 |
----------------+-----+-----+
Kompilat | x86 |
----------------+-----+-----+
Nutzerplattform | x86 | x64 |
----------------+-----+-----+
statische 64er | | |
SQLite.DLL | - | + |
----------------+-----+-----+
64er SQLite.DLL | | |
+ SQLite.Interop| - | + |
----------------+-----+-----+
statische 32er | | |
SQLite.DLL | - | + |
----------------+-----+-----+
32er SQLite.DLL | | |
+ SQLite.Interop| + | - |
----------------+-----+-----+
Wie ich gerade festgestellt habe, reicht es aus, eine 32-Bit Anwendung zu erstellen und nur die o.g. DLL-Konstellationen, je nach Nutzerplattform auszutauschen.
Was mich dann aber dennoch dazu zwingt, 2 Setups zu erstellen. Oder gibt es mit dem VS Installer eine Möglichkeit, Dateien abhängig vom Zielsystem zu kopieren?
Danke und Grüße
Igotcha
Alternative könntest Du vielleicht prozessorunabhängige Version von SQLite benuztzen,
guck mal hier ganz unten:
Welche Datenbank für Desktopanwendung
oder gleich:
csharp-sqlite
@kom2006:
Da hast du aber ein paar falsche Informationen.
Sowohl die x64 als auch die x86 Version von SQLite enthalten den Nativen Teil in ihrer jeweiligen Ausführung.
Die Interop wird nur benötigt, wenn du den Source ohne Binder übersetzt.
System.Data.SQLite Download Page
Was hindert dich daran beide DLL's im Setup zu haben und per CustomAction dann die richtige umzubenennen?
Also ich beziehe mich auf genau das von Dir genannte (neue) SQlite-Projekt, bzw. dessen Fortführung:
System.Data.SQLite Download Page
Das mit der CustomAction wäre ein Weg, aber da habe ich aktuell kein Wissen, wie ich das umzusetzen habe.
Und da kann man sich die X64 und x86 compilierten Assemblies mit includierten nativen Binaries ziehen.
Exemplarische Vorgehensweise: Erstellen einer benutzerdefinierten Aktion
Sowas gabs schonmal hier im Forum...
jedenfalls kannst du IntPrt.Size dazu verwenden um herauszufinden ob es sich um ein 32Bit oder 64Bit system handelt. demtnsprechend kannste dann auch die Assembly kopieren, umbenennen, Laden was auch immer.
wirf mal hier einen Blick rein
32bit/64bit - unterschiedliche DLL einbinden
MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden!
*"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht."
*"Ignorance simplifies ANY problem."
*"Stoppt die Piraterie der Musikindustrie"