部署Windows应用程序而不安装Sqlite .net提供程序

时间:2011-07-09 22:32:51

标签: c# deployment sqlite subsonic3

我正在将SubSonic 3和SQLite 3用于Windows应用程序。在编写应用程序时,我必须安装SQLite的.NET提供程序(System.Data.SQLite),我对部署应用程序的要求是,我只想创建一个可安装的并跳过安装.NET提供程序的部分。客户机器。

我已将System.Data.SQLite的引用添加到GAC(在安装项目中),但这不起作用,因为在运行应用程序时它说

System.ArgumentException:无法找到请求的.Net Framework数据提供程序。它可能没有安装。

我确信有一个解决方法,不需要在客户端计算机上安装SQLite的.Net Framework提供程序。

-mmcmedic

2 个答案:

答案 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添加到您的可执行文件中。