Laden...

In der IDE x86 und x64 Output mit entsprechenden Libraries konfigurieren?

Erstellt von kom2006 vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.512 Views
K
kom2006 Themenstarter:in
110 Beiträge seit 2007
vor 12 Jahren
In der IDE x86 und x64 Output mit entsprechenden Libraries konfigurieren?

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

888 Beiträge seit 2007
vor 12 Jahren

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

F
10.010 Beiträge seit 2004
vor 12 Jahren

@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?

K
kom2006 Themenstarter:in
110 Beiträge seit 2007
vor 12 Jahren

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.

F
10.010 Beiträge seit 2004
vor 12 Jahren

Und da kann man sich die X64 und x86 compilierten Assemblies mit includierten nativen Binaries ziehen.

Exemplarische Vorgehensweise: Erstellen einer benutzerdefinierten Aktion

P
660 Beiträge seit 2008
vor 12 Jahren

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"