System.DllNotFoundException:无法加载 DLL.开发计算机中没有错误,但目标计算机中没有错误
本文关键字:有错误 目标计算机 计算机 开发 DllNotFoundException DLL 加载 System | 更新日期: 2023-09-27 17:56:27
我在Visual Studio 2012上用WPF构建了一个C#应用程序,它使用C++DLL和目标。NET4.5. 我有两个正在运行的项目,一个用于 C# 项目,另一个用于C++ DLL 项目。我将这两个项目发布到一个文件夹中,该文件夹在同一文件夹中具有用于 C# 的.exe
和一个用于C++的.dll
。
我在开发它们的机器上运行它们,一切正常。我在其他机器上运行.exe
,它抛出以下异常:
System.DllNotFoundException: 无法加载 DLL
它无法识别同一文件夹中的 DLL。
我尝试了很多方法,但似乎没有任何效果。我遵循了这篇文章中的解决方案,但没有任何效果。
开发和目标计算机是相同的。在Dev中,安装了Visual Studio 2012,但这是唯一的区别。
法典:
C#:
[DllImport(@"Wireless.dll", EntryPoint = "?cert_exists@certificate@CertFuncs@@SAHHPBD@Z", CallingConvention = CallingConvention.Cdecl)]
static extern int cert_exists(int store, [MarshalAs(UnmanagedType.LPTStr)]string cert_str);
C++:
static int __declspec(dllexport) cert_exists(int type, LPCSTR cert_str);
更新:
如果我在目标计算机上安装 Visual Studio 2012,一切正常。如果我删除它,应用程序会再次崩溃。关于VS添加可以使应用程序工作的任何想法?
只是一个猜测:在用户的计算机上安装 Visual C++ 2012 可再发行组件包Microsoft。您使用的本机 DLL 可能具有必须安装的其他依赖项(尝试依赖关系查看器)。如果本机 DLL 需要例如注册表设置、配置文件等,则这些也应该存在。它应该像在开发计算机上安装它一样分发到用户计算机。
由于您的项目构建配置是"调试"(右键单击解决方案"->属性->"配置属性"->您应该看到所有项目配置设置为"调试")。它需要安装在运行exe的任何地方的Visual Studio(以"调试"模式构建)。
为了避免这种情况,请将配置更改为"发布"并重新生成项目。