【发布时间】:2019-01-24 14:49:08
【问题描述】:
背景
访问 Informix 数据库的 C#/.NET Web 应用程序。
客户端 SDK 安装在本地。
项目引用 IBM SDK 目录中的 IBM.Data.Informix.dll
我正在使用较旧的 dll,因为我们必须访问的 Informix 数据库是古老的(版本 7.something)
当通过 Visual Studio 在调试模式下运行时,它可以在我的机器(Windows 10)上完美运行。 太好了,我会将它部署到测试服务器(Windows Server 2012 R2)。
第一次尝试
- 从 Visual Studio 直接部署文件
- 运行应用程序以访问数据库
- 错误
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.
第二次尝试
- 将 dll 复制到名为 lib 的项目文件夹中
- 更改了对此 dll 的项目引用
- 已部署
- 与第一次尝试相同的错误
好的,我最好研究一下。请参阅下面的参考资料。
第三次尝试
- 删除了对 sdk dll 的引用
- 从 NuGet 安装 - Avatar Solucoe 版本
- 已部署
- 与第一次尝试相同的错误
更多研究
第四次尝试
- 将 gacutil 文件复制到服务器并从第三次尝试将 dll 安装到 GAC 中
- 已部署
- 新错误
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)
更多研究
第五次尝试
- 已卸载 NuGet 包
- 来自 sdk 的引用 dll
- 将 sdk .dll 添加到服务器上的 gac
- 刷新应用
- 与第一次尝试相同的错误
更多研究
第六次尝试
- 从 NuGet 安装 - 再次是 Avatar Solcoes 版本
- 向服务器上的 gac 添加了相同的 dll
- 在服务器上创建了新文件夹 C:\informix
- 将 iclit09b.dll 从 ibm sdk 复制到此文件夹
- 将文件夹添加到 PATH
- 重新启动 IIS
- 已部署
- 与第四次尝试相同的错误
更多研究
第七次尝试
- 已将 iclit09b.dll 复制到已部署的 bin 文件夹中。
- 已部署
- 与第四次尝试相同的错误
更多研究
发现了这个不祥的段落 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 没有太多经验。
我真的不知道下一步该做什么。
我们将不胜感激地收到任何建议。
没有特定顺序的引用
- Could not load file or assembly '' or one of its dependencies
- https://social.msdn.microsoft.com/Forums/vstudio/en-US/8289751b-be25-4a23-a5e2-709645b8c651/net-4-gacutil-on-production-server
- Unable to load DLL 'iclit09b.dll'
- Assembly load error for 64 bit .NET Informix ADO.NET provider
- http://www-01.ibm.com/support/docview.wss?uid=swg21618434
- C# could not load file or assembly...system cannot find file specified
- Could not load file or assembly 'Microsoft.AI.Web' or one of its dependencies. The system cannot find the file specified.
- Could not load file or assembly The system cannot find the file specified
- Could not load file or assembly or one of its dependencies. The system cannot find the file specified. (No GAC allowed)
- https://docs.microsoft.com/en-us/dotnet/api/system.appdomain.assemblyresolve?redirectedfrom=MSDN&view=netframework-4.7.2
- https://www.ibm.com/developerworks/data/library/techarticle/dm-1007dsnetids/index.html
- https://www.ibm.com/support/knowledgecenter/en/SSGU8G_12.1.0/com.ibm.netpr.doc/ids_net_010.htm
- IBM .net driver cannot find db2locale.dll
- https://social.msdn.microsoft.com/Forums/vstudio/en-US/5e23ebf7-33e1-4c85-beb5-bab6f51c02c4/informix-adonet-data-provider-connection-test
- http://galhano.com/blog/?p=1184
2019-01-25 更新
根据@Satyan 的回答,我卸载了所有以前版本的 SDK 并清除了 GAC
第八次尝试
- 我安装了最新的 SDK
- 我引用了 IBM.Data.Informix.dll 的 net40 版本
- 我将此版本添加到 GAC 中
- 在我的本地计算机上,我遇到了与第一次尝试相同的错误
第九次尝试
- 我引用了 IBM.Data.Informix.dll 的 net20 版本
- 我将此版本添加到 GAC 中
- 在我的本地计算机上,我遇到了与第一次尝试相同的错误
第十次尝试
幸运的是,我仍然拥有旧版 IBM.Data.Informix.dll 的副本
- 我引用了旧版本的 IBM.Data.Informix.dll
- 我将此版本添加到 GAC 中
- 在我的本地计算机上,我可以再次成功运行该程序。呸!
- 我部署到服务器
- 得到与第四次尝试相同的错误
更多研究
找到这些文章
- http://www-01.ibm.com/support/docview.wss?uid=swg21645914
- https://www-01.ibm.com/support/docview.wss?uid=swg21613231
这表明分辨率是
将 INFORMIXDIR 和 PATH 设置为系统环境变量,然后弹回 Microsoft Internet Information Server 或整个机器并尝试再次运行您的 ASP 应用程序。
第十一次尝试
- 添加了新的 INFORMIXDIR 系统环境变量
- 重新启动 IIS
- 试用应用程序
- 不。仍然得到与第四次尝试相同的错误。
在我的研究中,我发现了对“Informix Connect”的引用,据称它用于安装客户端产品 在 SDK 下载的 client_install.pdf 中,它引用了 installconnect.exe,但我下载的 SDK 中不存在该 exe。 如果是单独下载到SDK,那我就找不到了。
2019-02-08 更新
决定再试一次
第十二次尝试
- 添加了更靠近环境路径开头的 informix 目录
- 重新启动 IIS
- 新错误
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()
啊哈!一个新的错误,我到了某个地方。
第十三次尝试
- 将 C:\Program Files\Informix Client-SDK 4.10.FC9\msg 文件夹复制到服务器上的 INFORMIX 文件夹中
- 将 IIS_IUSRS 添加到 informix 文件夹
- 重新启动 IIS
- 与第十二次尝试相同的错误
我还尝试将 en_us 文件夹复制到 informix 文件夹中 - 不!
更多参考资料
- https://www.ibm.com/developerworks/community/forums/html/threadTopic?id=77777777-0000-0000-0000-000013802669
- Connect to informix database windows form application
2019 年 2 月 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 堆栈溢出错误而崩溃。幸运的是服务器是虚拟的,所以我恢复了昨晚的备份。一切正常。
【问题讨论】: