我正在将SubSonic 3和SQLite 3用于Windows应用程序。在编写应用程序时,我必须安装SQLite的.NET提供程序(System.Data.SQLite),我对部署应用程序的要求是,我只想创建一个可安装的并跳过安装.NET提供程序的部分。客户机器。
我已将System.Data.SQLite的引用添加到GAC(在安装项目中),但这不起作用,因为在运行应用程序时它说
System.ArgumentException:无法找到请求的.Net Framework数据提供程序。它可能没有安装。
我确信有一个解决方法,不需要在客户端计算机上安装SQLite的.Net Framework提供程序。
-mmcmedic
答案 0 :(得分:3)
除了使用您的应用程序复制数据库驱动程序.dll之外,您可能还需要注册DbProviderFactory。
通常,安装程序还会在.NET machine.config
文件中注册数据提供程序名称,以便ADO.NET可以将提供程序名称字符串转换为实际的程序集名称。您可以将其直接添加到app.config文件中。我没有一个SQLite示例,但我在MySql的app.config中有这个:
<configuration>
...
<system.data>
<DbProviderFactories>
<clear/>
<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data" />
</DbProviderFactories>
</system.data>
...
</configuration>
您可以通过查看正确安装了驱动程序的计算机,从您的machine.config中获取SQLite的正确配置元素:
C:\的Windows \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG \ machine.config中
另请注意,我在上面的配置中包含一个“clear”元素,因为如果DbProviderFactory已经被machine.config注册,则会抛出异常。所以我清除它们只是重新添加我的应用程序所需的那些。如果您肯定机器没有安装DB驱动程序,则可以省略“clear”元素。
答案 1 :(得分:0)
您只需要将System.Data.SQLite.dll
与您的应用程序一起部署。只需将它放在与可执行文件相同的fodler中,.NET就应该自动找到它。您也可以尝试将ILMerge添加到您的可执行文件中。