在.NET项目中复制本机DLL的最简洁方法

Wil*_*ins 6 c# msbuild dll managed-c++

我有一个引用托管C++项目的C#GUI应用程序,它需要7个本机C++ DLL.我正在寻找将这7个DLL复制到最终项目输出的最干净的方法.

什么工作
将所有DLL添加到C#应用程序,指定:

构建操作=="内容"
复制到输出目录==始终复制"

在某些情况下,这将使项目的基本文件夹成为混乱的DLL,所有这些都是引用项目的要求,而不是项目本身.

什么行不通

  • 使用上述设置将这些DLL添加到名为"Required DLLs"的文件夹中.它将其复制到输出中具有相同名称的文件夹,导致它们位于不正确的位置.我看不到指定输出目录的方法.
  • 嵌入式资源:在C#P/Invoke中,您可以将您引用的DLL添加为嵌入式资源,并将DLL嵌入到最终库中.我在Managed C++中没有看到这种可能性,我甚至不确定它是否适用于引用链.
  • 将DLL作为内容添加到托管C++项目中.文件不会被复制到输出目录.

在这种情况下,最佳解决方案是什么?我希望托管C++项目能够在可能的情况下处理它自己的DLL要求,并且最好以不会阻止项目跨多个应用程序使用的方式.

如果有一个干净的项目,最好是在项目的子文件夹中插入我的所有代码文件,并在根目录下使用DLL来使第一个解决方案有效吗?

解决方案:
使用Joseph的post-build建议,以下命令可以使用"Required DLLs"文件夹.

xcopy"$(ProjectDir)必需的DLL*.*""$(TargetDir)"/ Q/Y.

/ Q隐藏输出中的单个文件,/ Y禁止覆盖提示.

小智 6

您可以使用post-build事件将目录的内容(例如,"Required DLLs"目录)复制到项目的输出目录中.