DLL未找到:引用依赖DLL

时间:2011-09-06 19:10:41

标签: c# c++ dll reference

我正在尝试实现在C#表单应用程序中使用Intel Performance Primitives的C ++ DLL(我自己创建的)。当我尝试运行程序时,我收到“DLL Not Found Exception”。在本网站的其他帖子中提出的一个可能的原因是必须引用相关的DLL,事实上在下载DpendencyWalker后我发现我的DLL使用“IPPS-7.0.DLL”。

我的问题是我不清楚如何引用这些依赖的DLL。我已经将IPPS-7.0.DLL包含文件夹添加到引用路径以及添加了对“IntelCppOptPkg”和“IntelLibOptPgk”程序集的引用,但这并没有解决问题。

所以,我相信这是问题吗?如果是这样,如何在托管代码中引用依赖DLL?

谢谢。

2 个答案:

答案 0 :(得分:2)

您没有引用它们,它们不是.NET程序集。您只需要确保将DLL复制到您的构建目录中。最简单的方法是使用Project + Add Existing Item,从复制的任何地方选择DLL。然后选择添加的文件,在Properties窗口中设置Build Action = Content,Copy to Output Directory = Copy if new。在源代码管理中检入DLL通常是一个好主意。

答案 1 :(得分:1)

托管代码不能像引用托管程序集那样引用非托管dll。托管引用实际上会更改程序集的元数据:

  

编译器记录静态   构建时在程序集清单的元数据中引用。   ...   引用程序集的首选方法是使用完整引用,   包括程序集名称,版本,区域性和公钥标记   (如果存在的话)。

原生dll根本没有与之关联的.NET元数据。必须在Post Build步骤或部署期间手动复制它们。有一个workaround,但如果您的托管应用程序是独立于平台的(任何CPU)并且您拥有x86和x64版本的非托管dll,我认为它不会起作用。