System.DllNotFoundException:无法加载DLL。 Dev机器中没有错误,但目标机器中有错误

时间:2013-01-29 16:41:31

标签: c# windows dll

我在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,但这是唯一的区别。

代码:

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添加什么的任何想法可以使应用程序工作?

2 个答案:

答案 0 :(得分:6)

只是猜测:在用户的计算机上安装Microsoft Visual C ++ 2012 Redistributable Package。您使用的本机DLL可能具有必须安装的其他依赖项(try Dependency Walker)。如果本机DLL需要例如注册表设置,配置文件等,这些也应该存在。它应该像在开发机器上安装它一样分发给用户机器。

答案 1 :(得分:0)

这是因为您的项目构建配置为“Debug”(右键单击解决方案'' - >属性 - >'配置属性 - >您应该看到所有项目配置都设置为'Debug')。它需要在运行exe的任何地方安装visual studio(它以“Debug”模式构建)。

为了避免这种情况,请将配置更改为“Release”并重建项目。