背景
访问Informix数据库的C#/ .NET Web应用程序。 Client SDK在本地安装。 Project引用IBM SDK目录中的IBM.Data.Informix.dll我正在使用较旧的dll,因为我们必须访问的Informix数据库是古老的(Version 7.something)
通过Visual Studio在调试模式下运行时,它在我的机器(Windows 10)上运行良好。太好了,我将它部署到测试服务器(Windows Server 2012 R2)。
第一次尝试
Could not load file or assembly 'IBM.Data.Informix, Version=3.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
The system cannot find the file specified.
第二次尝试
好的,我最好研究一下。请参阅下面的参考资料
第三次尝试
更多研究
第四次尝试
The type initializer for 'IBM.Data.Informix.IfxConnection' threw an exception.
Unable to load DLL 'iclit09b.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
更多研究
第五次尝试
更多研究
第六次尝试
更多研究
第七次尝试
更多研究
发现这个不祥的段落https://www.ibm.com/developerworks/data/library/techarticle/dm-0510durity/index.html
要点:IBM Informix ADO.Net驱动程序不是自安装在安装的/ bin目录中的IBM.Data.Informix.dll文件中。显然,它使用SDK安装的一些其他客户端代码。这意味着您必须在将使用ADO.Net驱动程序的任何计算机上安装Informix Client SDK。您不能只在您的发行版中包含IBM.Data.Informix.dll。这可能是某些应用程序的严重限制。您还需要通过SDK设置(SetNet32)来定义Informix数据源。
我们真的需要在生产服务器上安装SDK吗?并且必须在GAC中安装DLL?如果是这样,人们如何部署到他们无法控制的服务器?
您可能会说,我对Informix和.NET没有太多经验。
我真的不知道接下来该做什么。
我们非常感激地收到任何建议。
参考文献没有特别的顺序
更新2019-01-25
继@ Satyan的回答后,我卸载了所有以前版本的SDK并清除了GAC
第八次尝试
第九次尝试
第十次尝试
幸运的是,我仍然拥有较旧的IBM.Data.Informix.dll的副本
更多研究
发现这些文章
这表明决议是
将INFORMIXDIR和PATH设置为系统环境变量,然后退回Microsoft Internet Information Server或整个计算机,并尝试再次运行ASP应用程序。
第十一次尝试
在我的研究中,我发现了“Informix Connect”的引用,据说它用于安装客户端产品,而在SDK下载的client_install.pdf中引用了installconnect.exe,但是我下载的SDK中不存在该exe。如果是单独下载到SDK,那么我找不到它。
更新2019-02-08
决定再次破解此事
第十二次尝试
SQL0035N The file "en_us\IBM.Data.Informix.xml" cannot be opened.
at IBM.Data.Utilities.IfxResource..ctor(CultureInfo cultureInfo, String dirName, String fileName, String szMsgPath, String xpath)
at IBM.Data.Utilities.IfxResources.GetResource(CultureInfo cultureInfo, String xpath)
at IBM.Data.Informix.IfxException.get_Message()
啊哈!一个新的错误,我到了某个地方。
第十三次尝试
我也尝试将en_us文件夹复制到informix文件夹中 - 不!
更多参考
更新2019-02-14
第十四次尝试OK。我决定冒风险并在服务器上安装SDK。
我没想到的是安装重新启动服务器而没有先问我。
无论如何,当它恢复时,我们又回到了原来的错误
Could not load file or assembly 'IBM.Data.Informix, Version=3.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208' or one of its dependencies.
The system cannot find the file specified.
好。那没用。它也以某种方式搞砸了TFS的安装,无法再通过浏览器访问。
好的,我将卸载SDK。不。卸载功能因Java堆栈溢出错误而崩溃。幸运的是服务器是虚拟的,所以我昨晚的备份恢复了。一切都好的。
最新的.Net驱动程序是V4,具有同样良好的向后兼容性,并且有望与Informix数据库服务器版本7一起使用。我鼓励你尝试最新的。
您可能遇到的问题是由于仍然部署在GAC(全局程序集缓存)中的旧驱动程序二进制文件发生冲突。如果是这样,值得尝试清理GAC,可以通过以下命令完成。打开Visual Studio命令窗口(与您正在使用的.net框架版本匹配,在本例中我们使用.net SDK v4)仅供参考:将程序集部署到GAC可能需要管理员权限,然后您可以以管理员身份打开VS命令窗口。
cd INFORMIXDIR\bin\netf40
gacutil /u IBM.Data.Informix
从GAC清除旧二进制文件后,通过以下命令将其重新安装到GAC。
gacutil /i IBM.Data.Informix.dll
只是为了记录这里我是如何设法解决问题的
它有效,但我更喜欢一个独立的应用程序,而不是必须维护两个解决方案。