0

我有一个应用程序可以在我的系统上完美运行(在 IDE 中和已安装),但在安装在任何其他系统上时完全失败。

我将源代码的删节版本移过来,看看是否能找出问题所在,令我无限愤怒的是,我发现当程序试图引用另一个库中包含的类时发生错误,该类使用MySQL.Data.DLL 文件...

[在这里插入无尽的诅咒、发誓和其他 R 级语言]。

为什么?为什么?为什么?! 为什么?!?! 认真的 - 什么鬼?!

4

1 回答 1

2

当您在应用程序中使用 MySql 并安装在客户端计算机上时,它将MySql.Data.dll在客户端计算机中搜索并转到路径

C:\Program Files (x86)\MySQL\MySQL Connector Net X.X.X\Assemblies\(假设你已经在 C 盘安装了 MySql 连接器)

探索Assemblies文件夹你会看到这个MySql.Data.dll检查这个文件的版本并同样检查你的MySql.Data.dll它们必须相同。

一般的外行用户不会安装 MySQL 连接器。当这个程序被发布以供普遍流通时我应该怎么做,而 John Q. 用户无法运行它,因为他们没有安装这个不起眼的……东西?

您的应用程序必须将其所有必备组件打包,因此当客户端安装它时,必备组件也应与您的软件一起安装。假设我用MySql connector 6.9.6.0.

做以下事情

  1. 将 MySql 连接器与您的软件版本一起打包
  2. MySql Connector在 App.Config 文件中指定版本。

     <system.data>
        <DbProviderFactories>
            <clear/>
            <remove invariant="MySql.Data.MySqlClient"/>
            <add name="MySql.Data.MySqlClient" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,Version=6.9.6.0, Culture=neutral,PublicKeyToken=c5687fc88969c44d"/>
        </DbProviderFactories>
    </system.data>
    

现在客户端机器将专门在app.config.

顺便说一句,这两点是可选的,如果你不这样做,那么你必须照顾好每一件事,就像你现在所做的那样。

于 2015-11-17T05:31:50.050 回答