首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“Sap.Data.Hana.HanaConnection”的类型初始化程序引发了一个异常。-> System.IO.FileNotFoundException:找不到libADONETHDB.dll

“Sap.Data.Hana.HanaConnection”的类型初始化程序引发了一个异常。-> System.IO.FileNotFoundException:找不到libADONETHDB.dll
EN

Stack Overflow用户
提问于 2021-05-11 13:16:03
回答 2查看 3K关注 0票数 0

我只在一台特定的机器上有问题。我有两个程序,引用Sap.Data.Hana.v4.5.dll,,ADO.NET提供者为.NET 4.5为HANA数据库。当我的程序实例化连接对象时

代码语言:javascript
复制
dbConnection = new HanaConnection(...);

我知道这个错误:

代码语言:javascript
复制
System.TypeInitializationException: The type initializer for 'Sap.Data.Hana.HanaConnection' threw an exception. ---> System.IO.FileNotFoundException: Cannot find libADONETHDB.dll.
   at Sap.Data.Hana.HanaUnmanagedDll.SearchNativeDlls(String regKeyName)
   at Sap.Data.Hana.HanaUnmanagedDll..ctor()
   at Sap.Data.Hana.HanaUnmanagedDll.get_Instance()
   at Sap.Data.Hana.HanaConnection..cctor()
   --- End of inner exception stack trace ---
   at [...my program calls...]

为什么找不到libADONETHDB.dll?

我的应用程序是32位构建的,另一种是64位。在这台机器上,我安装了machine客户端2.8.20.23662 (最新版本),包括32位和64位。找不到的文件似乎存在:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-24 14:44:37

我的特点是GAC已经被Sap.Data.Hana.v4.5.dll的版本1所破坏:

可能在过去HANA客户端版本1已经安装和删除,卸载没有清理GAC。我的程序使用任何版本的HANA客户端,都适用于版本1和2。由于某种原因,它们在启动时似乎采用GAC中的Sap.Data.Hana.v4.5.dll版本。进程监视器(感谢@sc911)确认了这一点:

然后,这个.NET DLL在C:\Program (x86)\hdbclient中查找一些非托管DLL。版本1似乎在根文件夹中寻找libADONETHDB.dll。但是目前在这个文件夹中,我们有HANAClient2.x,它的文件夹结构与版本1(根文件夹中没有libADONETHDB.dll )有很大的不同。因此,这个问题出现了错误。所有这些对于32位和64位HANA客户端都是有效的.

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Sap.Data.Hana.v4.5中的解决了重命名或删除版本1文件夹的问题(可能有更好的方法来执行这种清理)。

票数 1
EN

Stack Overflow用户

发布于 2021-05-14 14:47:04

您可以在运行程序的相关部分时使用过程监视器来查看哪个文件丢失了以及它应该在哪个路径中。排除文件事件以外的所有其他事件,并过滤掉所有成功消息。

也许它是相对于调用DLL引用的(其中定义了Sap.Data.Hana.HanaUnmanagedDll.SearchNativeDlls )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67487540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档