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



我使用SubSonic 3与SQLite 3的Windows应用程序。在编程应用程序时,为SQLite安装。net提供程序(System.Data.SQLite)对我来说是强制性的,我对部署应用程序的要求是,我只想创建一个可安装的,并跳过在客户端机器上为SQLite安装。net提供程序的部分。

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

系统。无法找到请求的。net框架数据提供程序。

我相信有一个解决办法,它不应该是必要的安装。net框架提供程序的SQLite在客户端机器上。

-mmcmedic

除了将DB驱动程序.dll复制到您的应用程序中,您可能还需要注册DbProviderFactory。

通常安装程序也会在. net machine.config文件中注册数据提供程序名称,以便ADO。. NET可以将提供程序名称字符串转换为实际的程序集名称。你可以直接将其添加到app.config文件中。我没有SQLite的例子,但我有这个在我的app.config MySql:

<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>

您可以从您的机器中获得SQLite的正确配置元素。在已正确安装驱动程序的计算机上进行配置,请查看:

C: Windows Microsoft.NET Framework v2.0.50727 CONFIG machine.config

还要注意,我在上面的配置中包含了一个"clear"元素,因为如果DbProviderFactory已经被机器注册。配置时,它会抛出异常。所以我把它们全部清除,然后重新添加应用程序需要的那些。如果您确定这些机器不会安装DB驱动程序,则可以省略"clear"元素。

您只需要将System.Data.SQLite.dll与应用程序一起部署即可。只要把它和你的可执行文件放在同一个文件夹里,. net就会自动找到它。您也可以尝试将其合并到您的可执行文件中。

相关内容

最新更新