我只在一台特定的机器上有问题。我有两个程序,引用Sap.Data.Hana.v4.5.dll,,ADO.NET提供者为.NET 4.5为HANA数据库。当我的程序实例化连接对象时
dbConnection = new HanaConnection(...);我知道这个错误:
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位。找不到的文件似乎存在:

发布于 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文件夹的问题(可能有更好的方法来执行这种清理)。
发布于 2021-05-14 14:47:04
您可以在运行程序的相关部分时使用过程监视器来查看哪个文件丢失了以及它应该在哪个路径中。排除文件事件以外的所有其他事件,并过滤掉所有成功消息。
也许它是相对于调用DLL引用的(其中定义了Sap.Data.Hana.HanaUnmanagedDll.SearchNativeDlls )。
https://stackoverflow.com/questions/67487540
复制相似问题