VB.net でプログラムを開発し、 .NET 用のSystem.Data.SQLiteプリコンパイル済みバイナリを使用していますが、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'
おそらく、1つのdllのみを使用する方法はありますか:
- #IFDEF (x86 にはコードの一部が含まれる) または x64 コードなどのディレクティブを追加します。
- dll を結合して 1 つだけにします。
- VB.netでこのdllを参照してください
x32用とx64用ではなく、コンパイルを1つだけ作成したいので、他のより良いアイデアだと思いますか。
たとえば (32 ビット):
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
64ビットアーキテクチャで動作するように変更するにはどうすればよいですか? たぶん、32 と 64 の dll の両方を含めて、関数に次のようなことを行います
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