我正在尝试实现在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?
谢谢。
答案 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,我认为它不会起作用。