DllNotFoundException PInvoke 问题

DllNotFoundException PInvoke issue

在 Visual Studio 2013 年执行测试期间(C# 代码)出现这样的错误:

System.TypeInitializationException: System.TypeInitializationException: 'Teigha.Core.GlobalsPINVOKE' 的类型初始值设定项抛出异常。 ---> System.TypeInitializationException: 'SWIGExceptionHelper' 的类型初始值设定项抛出异常。 ---> System.DllNotFoundException: 无法加载 DLL 'TD_SwigCore_4.00_10.dll': 找不到指定的模块。 (HRESULT 异常:0x8007007E)。正在中止测试执行。

我的朋友在另一台计算机上使用相同的代码分支。他没有这样的问题。在构建期间,所有 dll 都被复制到 TestResults\Deploy 目录(TD_SwigCore_4。00_10.dll)。

我用过

dependbin /DEPENDENTS TD_SwigCore_4.00_10.dll

检查此 dll 的 dll 依赖项: KERNEL32.dll, USER32.dll, ole32.dll, TD_Ge_4.00_10.dll, TD_DbRoot_4.00_10.dll, TD_Gi_4.00_10.dll , TD_Gs_4.00_10.dll , TD_SpatialIndex_4.00_10.dll, TD_Br_4.00_10.dll, TD_Db_4.00_10.dll, TD_Root_4.00_10.dll, TD_Alloc_4.00_10.dll, MSVCP100.dll, MSVCR100.dll。 我将所有这些 dll 复制到 system32 文件夹,以便加载所有 dll (https://msdn.microsoft.com/en-us/library/7d83bc18(v=vs.120).aspx)。这没有帮助。错误仍然存​​在。

此问题的解决方案是将丢失的 dll 复制到目录: {Visual_project_directory}\bin\Debug。文件不能隐藏在某些目录中,必须将它们直接复制到该目录中。 可以使用 dumpbin(它与 Visual Studio 一起安装在其目录之一中)或 Dependency Walker 找到丢失的 dll。