我有一个引用托管 C++ 项目的 C# GUI 应用程序,该项目需要 7 个 native C++ DLL。我正在寻找将这 7 个 DLL 复制到最终项目输出的最干净的方法。
什么有效
将所有 DLL 添加到 C# 应用程序,指定:
Build Action == "Content"
Copy To Output Directory == Copy Always"
在某些情况下,这会使项目的基础文件夹成为一堆 DLL,所有这些都是引用项目的需求,而不是该项目本身。
什么不起作用
- 使用上述设置将这些 DLL 添加到名为“Required DLL”的文件夹中。它将它复制到输出中具有相同名称的文件夹,导致它们位于不正确的位置。我看不到指定输出目录的方法。
- 嵌入式资源:在 C# P/Invoke 中,您可以将引用的 DLL 添加为嵌入式资源,并且 DLL 嵌入到您的最终库中。我在托管 C++ 中看不到这种可能性,我什至不确定它是否适用于引用链。
- 将 DLL 添加为托管 C++ 项目中的内容。文件不会复制到输出目录。
在这种情况下最好的解决方案是什么?如果可能,我更希望托管 C++ 项目能够处理它自己的 DLL 要求,并且最好以不会阻止项目跨多个应用程序使用的方式。
就拥有一个干净的项目而言,将我的所有代码文件插入项目的子文件夹中,并将 DLL 置于根目录以使第一个解决方案起作用是否更好?
解决方案:
使用 Joseph 的构建后建议,以下命令可以使用“Required DLLs”文件夹。
xcopy "$(ProjectDir)Required DLLs*.*" "$(TargetDir)" /Q /Y
/Q 从输出中隐藏单个文件,/Y 禁止覆盖提示。
最佳答案
您可以使用构建后事件将目录(例如“必需的 DLL”目录)的内容复制到项目的输出目录中。
关于c# - 在 .NET 项目中复制 native DLL 的最简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1521040/