Sto sviluppando un programma in VB.net e utilizzando System.Data.SQLite binari precompilati per .NET, tuttavia non funziona per architetture x64 e sto riscontrando il classico problema di cultura e il caricamento non corretto file.SQLite dll per architetture x86/x64
System.BadImageFormatException:
Could not load file or assembly 'System.Data.SQLite, Version=1.0.65.0, Culture=neutral,
PublicKeyToken=db937bc2d44ff139' or one of its dependencies. An attempt was made to load a program with an incorrect format.
File name: 'System.Data.SQLite,
Version=1.0.65.0,
Culture=neutral,
PublicKeyToken=db937bc2d44ff139'
C'è un modo per utilizzare un solo dll, forse:
- aggiungere alcune direttive come #IFDEF (x86 includono una parte di codice) o il codice x64 altro
- Registrati DLL per fare solo uno.
- Riferimento questa dll in VB.net
pensi sia altra idea migliore, come vorrei fare solo una compilation, non uno per x32 e x64 per altri.
Ad esempio (32 bit):
Private Shared Sub OpenConection(ByRef Conn As SQLite.SQLiteConnection)
Conn = New SQLite.SQLiteConnection("Data Source=" & System.Environment.CurrentDirectory & "\database.db")
Conn.Open()
End Sub
Private Shared Sub CloseConection(ByRef Conn As SQLite.SQLiteConnection)
Conn.Close()
Conn.Dispose()
Conn = Nothing
End Sub
Public Shared Function ReturnSelect(ByVal DataTAbleName As String, ByVal sQuery As String, ByVal sWhere As String) As Data.DataTable
Dim lDT As New DataTable
Dim lTA As New SQLite.SQLiteDataAdapter
If DataTAbleName Is Nothing Then Return New DataTable(DataTAbleName)
Try
OpenConection(conexion)
lTA = New SQLite.SQLiteDataAdapter("SELECT " & sQuery & " FROM " & DataTAbleName & IIf(sWhere <> String.Empty, " WHERE ", "") & sWhere, conexion)
lTA.Fill(lDT)
Catch ex As Exception
Throw ex
Finally
CloseConection(conexion)
lTA.Dispose()
lTA = Nothing
End Try
Return lDT
End Function
come cambiare che lavorare su un'architettura a 64 bit? Forse compresi 32 e 64 dll e nelle funzioni fare qualcosa di simile
Try
Instance = Me
'Check If Homidom Run in 32 or 64 bits
If IntPtr.Size = 8 Then _OsPlatForm = "64" Else _OsPlatForm = "32"
'continue code
Catch ex As Exception
' ex.Message
End Try
Nota, ho dovuto trovare le DLL di interoperabilità nel file zip binario per il target .NET su cui sto lavorando. –