'Sap.Data.Hana.HanaConnection' 的类型初始值设定项引发异常。 ---> System.IO.FileNotFoundException: 找不到 libADONETHDB.dll
The type initializer for 'Sap.Data.Hana.HanaConnection' threw an exception. ---> System.IO.FileNotFoundException: Cannot find libADONETHDB.dll
我只在特定机器上遇到问题。
我有两个程序引用了 Sap.Data.Hana.v4.5.dll,用于 HANA 数据库的 .NET 4.5 的 ADO.NET 提供程序。
当我的程序使用
实例化连接对象时
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 位的。
在这台机器上,我安装了 32 位和 64 位的 SAP HANA 客户端 2.8.20.23662(最新版本)。
找不到的文件似乎存在:
您可以使用 Process Monitor 而 运行 程序的相关部分来查看哪个文件丢失以及它应该在的路径。排除除文件事件之外的所有其他事件并过滤掉所有成功消息。
也许它是相对于调用 DLL(其中定义了 Sap.Data.Hana.HanaUnmanagedDll.SearchNativeDlls
)的引用。
我的观点是 GAC 已被 Sap.Data.Hana.v4.5.dll 的版本 1 损坏:
可能在过去安装和删除了 HANA 客户端版本 1,并且卸载没有清理 GAC。
我的程序使用任何版本的 HANA 客户端,适用于版本 1 和版本 2。出于某种原因,当他们开始时,他们似乎在 GAC 中使用 Sap.Data.Hana.v4.5.dll 的版本 1。 Process Monitor(感谢 )确认:
此 .NET DLL 然后在 C:\Program Files (x86)\hdbclient 中查找一些非托管 DLL。版本 1 似乎在根文件夹中寻找 libADONETHDB.dll。
但是目前在该文件夹中的这台机器中,我们有 HANA Client 2.x,其文件夹结构与版本 1 的文件夹结构完全不同(根文件夹中没有 libADONETHDB.dll)。
因此这个问题的错误。
所有这些对 32 位和 64 位 HANA 客户端均有效。
我解决了重命名或删除 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Sap.Data.Hana.v4.5 中的版本 1 文件夹(可能在那里是执行此清理的更好方法)。
我只在特定机器上遇到问题。 我有两个程序引用了 Sap.Data.Hana.v4.5.dll,用于 HANA 数据库的 .NET 4.5 的 ADO.NET 提供程序。 当我的程序使用
实例化连接对象时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 位的。 在这台机器上,我安装了 32 位和 64 位的 SAP HANA 客户端 2.8.20.23662(最新版本)。 找不到的文件似乎存在:
您可以使用 Process Monitor 而 运行 程序的相关部分来查看哪个文件丢失以及它应该在的路径。排除除文件事件之外的所有其他事件并过滤掉所有成功消息。
也许它是相对于调用 DLL(其中定义了 Sap.Data.Hana.HanaUnmanagedDll.SearchNativeDlls
)的引用。
我的观点是 GAC 已被 Sap.Data.Hana.v4.5.dll 的版本 1 损坏:
可能在过去安装和删除了 HANA 客户端版本 1,并且卸载没有清理 GAC。
我的程序使用任何版本的 HANA 客户端,适用于版本 1 和版本 2。出于某种原因,当他们开始时,他们似乎在 GAC 中使用 Sap.Data.Hana.v4.5.dll 的版本 1。 Process Monitor(感谢
此 .NET DLL 然后在 C:\Program Files (x86)\hdbclient 中查找一些非托管 DLL。版本 1 似乎在根文件夹中寻找 libADONETHDB.dll。 但是目前在该文件夹中的这台机器中,我们有 HANA Client 2.x,其文件夹结构与版本 1 的文件夹结构完全不同(根文件夹中没有 libADONETHDB.dll)。 因此这个问题的错误。 所有这些对 32 位和 64 位 HANA 客户端均有效。
我解决了重命名或删除 C:\Windows\Microsoft.NET\assembly\GAC_MSIL\Sap.Data.Hana.v4.5 中的版本 1 文件夹(可能在那里是执行此清理的更好方法)。