我在Visual Studio 2012上使用WPF构建了一个C#应用程序,它使用C ++ DLL并以.NET4.5为目标。我有两个项目正在运行,一个用于C#项目,另一个用于C ++ DLL项目。我将这两个项目发布到一个文件夹中,该文件夹在C#中有.exe
,在同一文件夹中有一个.dll
用于C ++。
我在他们开发的机器上运行它们,一切正常。我在其他机器上运行.exe
并抛出此异常:
System.DllNotFoundException:无法加载DLL
它无法识别同一文件夹中的DLL。
我尝试过很多东西,似乎没什么用。我按照this post中的解决方案,但没有任何效果。
Dev和Target机器完全相同。在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);
static int __declspec(dllexport) cert_exists(int type, LPCSTR cert_str);
如果我在目标计算机上安装Visual Studio 2012,一切正常。如果我删除它,应用程序再次崩溃。关于VS添加什么的任何想法可以使应用程序工作?
答案 0 :(得分:6)
只是猜测:在用户的计算机上安装Microsoft Visual C ++ 2012 Redistributable Package。您使用的本机DLL可能具有必须安装的其他依赖项(try Dependency Walker)。如果本机DLL需要例如注册表设置,配置文件等,这些也应该存在。它应该像在开发机器上安装它一样分发给用户机器。
答案 1 :(得分:0)
这是因为您的项目构建配置为“Debug”(右键单击解决方案'' - >属性 - >'配置属性 - >您应该看到所有项目配置都设置为'Debug')。它需要在运行exe的任何地方安装visual studio(它以“Debug”模式构建)。
为了避免这种情况,请将配置更改为“Release”并重建项目。