【问题标题】:LoadFrom fails when loading SQLite assembly加载 SQLite 程序集时 LoadFrom 失败
【发布时间】:2016-11-06 14:17:13
【问题描述】:

我正在尝试从 PowerShell 脚本加载 SQLite.dll,以便我可以访问本地 SQLite 数据库,但我不断收到 [System.Reflection.Assembly]::LoadFrom() 方法的异常。

错误提示:

使用“1”参数调用“LoadFrom”的异常:“无法加载文件或
程序集 'file:///C:\Source\System.Data.SQLite.dll' 或其依赖项之一。
试图加载格式不正确的程序。”
在 C:\Source\getAppData.ps1:10 char:5
+ [void][System.Reflection.Assembly]::LoadFrom($sqlite_library_path)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : BadImageFormatException

我尝试了几个不同版本的 System.Data.SQLite.dll - 我的第一反应是这是一个 32 位版本,而我使用的是 64 位操作系统。

我也尝试过Add-Type,但得到了类似的错误:

Add-Type : 无法加载文件或程序集
'file:///C:\Source\System.Data.SQLite.dll' 或其依赖项之一。一个
试图加载格式不正确的程序。
在 C:\Source\getAppData.ps1:12 char:5
+ 添加类型-路径 $sqlite_library_path
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : NotSpecified: (:) [Add-Type],BadImageFormatException
    + FullyQualifiedErrorId : System.BadImageFormatException,Microsoft.PowerShell.Commands.AddTypeCommand

这是 PowerShell 脚本;我确保它以管理员身份运行。我不确定是否需要解除对 DLL 的阻止、授予它权限或使用其他加载程序集的方法 - 我对 PowerShell 相当陌生,所以我想这是某种新手错误或环境问题,因为我有朋友说这个方法应该有效。

[cmdletbinding()]
[string]$sqlite_library_paxcth = "C:\Source\System.Data.SQLite.dll"
[string]$db_query = "SELECT Name from kiosk where STRFTIME('%s',LastFullSync)>STRFTIME('%s',date('now', '-60 day'))"
[string]$db_data_source = "C:\Source\AppData.db"

if (!(Test-Path $sqlite_library_path)) {throw $outcome = "Unable to find sqlite library"}
if (!(Test-Path $db_data_source)) {throw $outcome = "Unable to find appdb"}

[void][System.Reflection.Assembly]::LoadFrom($sqlite_library_path)

#Add-Type -Path $sqlite_library_path

$db_dataset = New-Object System.Data.DataSet
$db_data_adapter = New-Object System.Data.SQLite.SQLiteDataAdapter($db_query,"Data Source=$db_data_source")
[void]$db_data_adapter.Fill($db_dataset)

我的目标是简单地查询本地文件系统中的 SQLite 数据库并将结果通过管道传输到数据网格或其他 GUI 以显示结果。

【问题讨论】:

  • 您使用的是哪个 .net 框架版本?
  • 您运行的是哪个版本的 PowerShell?您还使用 64 位 PowerShell 还是 32 位?常用快捷方式默认为 64 位,因此请查找 PowerShell (x86)。也可以看看this
  • 检查$PSVersionTable.CLRVersion$env:PROCESSOR_ARCHITECTURE 的值,并确保您拥有适用于该版本和操作系统架构的正确DLL。
  • 我最终在 32 位 ISE 中运行了我的脚本,顺便说一句,它运行良好。

标签: c# .net sqlite powershell


【解决方案1】:

我遇到了同样的问题,最终破坏了我尝试 64 位的尝试。使用 32 位版本的 PowerShell 和 SQLite 程序集可以满足我的需要。

附带说明:我的笔记本电脑加载 64 位版本没有任何疑虑。我不知道为什么,这让我有点发疯。 :)

【讨论】:

    猜你喜欢
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多