背景
访问Informix数据库的C#/。NET Web应用程序。
客户端SDK在本地安装。
项目引用IBM SDK目录中的IBM.Data.Informix.dll
我使用的是较早的dll,因为我们必须访问的Informix数据库是古老的(版本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应用程序。
第11次尝试
在我的研究中,我发现了对“ Informix Connect”的引用,据说该“ Informix Connect”用于安装客户端产品 在SDK下载中的client_install.pdf中,它引用了installconnect.exe,但该exe在我下载的SDK中不存在。 如果是单独下载到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文件夹复制到notifyix文件夹-不!
更多参考
更新2019-02-14
第十四次尝试 好。我决定冒险,然后在服务器上安装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堆栈溢出错误而崩溃。幸运的是,该服务器是虚拟服务器,因此我恢复了昨晚的备份。一切都很好。
答案 0 :(得分:1)
最新的.Net驱动程序V4具有同等的向后兼容性,并且可以与Informix数据库服务器version7一起很好地工作。我鼓励您尝试最新的。
您可能遇到的问题是由于与仍部署在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
答案 1 :(得分:0)
记录一下,这就是我如何解决问题的方法
它可以工作,但是我宁愿使用一个独立的应用程序,而不必维护两个解决方案。