我在Visual Studio 2012上使用WPF构建了一个C#应用程序,它使用C++ DLL并以.NET4.5为目标.我有两个项目正在运行,一个用于C#项目,另一个用于C++ DLL项目.我将这两个项目发布到一个文件夹中,该文件夹中有一个.exefor C#和一个.dllfor C++的文件夹.
我在他们开发的机器上运行它们,一切正常.我.exe在其他机器上运行它会抛出此异常:
System.DllNotFoundException:无法加载DLL
它无法识别同一文件夹中的DLL.
我尝试了很多东西,似乎什么都没有用.我在这篇文章中遵循了解决方案但没有任何效果.
开发和目标机器完全相同.在Dev中,安装了Visual Studio 2012,但这是唯一的区别.
[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);
Run Code Online (Sandbox Code Playgroud)
static int __declspec(dllexport) cert_exists(int type, LPCSTR cert_str);
Run Code Online (Sandbox Code Playgroud)
如果我在目标计算机上安装Visual Studio 2012,一切正常.如果我删除它,应用程序再次崩溃.关于VS添加什么的任何想法可以使应用程序工作?
只是猜测:在用户的计算机上安装Microsoft Visual C++ 2012 Redistributable Package.您使用的本机DLL可能具有必须安装的其他依赖项(尝试Dependency Walker).如果本机DLL需要例如注册表设置,配置文件等,这些也应该存在.它应该像在开发机器上安装它一样分发给用户机器.