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

C# 在.NET项目中复制本机DLL的最干净方法 我有一个引用了托管C++项目的C语言GUI应用程序,它需要7个本地C++ DLL。我正在寻找将这7个DLL复制到最终项目输出的最干净的方法,c#,dll,msbuild,managed-c++,C#,Dll,Msbuild,Managed C++,什么有效 将所有DLL添加到C#应用程序,并指定: 构建操作==“内容” 复制到输出目录==始终复制” 在某些情况下,这将使项目的基本文件夹成为一堆DLL,所有这些DLL都是引用项目的需求,而不是项目本身 什么不起作用 使用上述设置将这些DLL添加到名为“Required DLL”的文件夹中。这会将其复制到输出中同名的文件夹中,导致它们位于错误的位置。我找不到指定输出目录的方法 嵌入式资源:在C++中,可以添加你所引用的DLL作为嵌入的资源,DLL被嵌入到最终的库中。我不认为在托管C++中有这

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

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

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

什么不起作用

  • 使用上述设置将这些DLL添加到名为“Required DLL”的文件夹中。这会将其复制到输出中同名的文件夹中,导致它们位于错误的位置。我找不到指定输出目录的方法
  • 嵌入式资源:在C++中,可以添加你所引用的DLL作为嵌入的资源,DLL被嵌入到最终的库中。我不认为在托管C++中有这种可能性,我甚至不确定它是否与引用链一起工作。
  • 将DLL添加为托管C++项目中的内容。文件不被复制到输出目录。

这种情况下最好的解决方案是什么?我希望托管的C++项目能够处理它自己的DLL需求,如果可能的话,最好的方式是防止项目在多个应用程序之间使用。 就拥有一个干净的项目而言,是否最好将我的所有代码文件插入项目的子文件夹中,并将DLL放在根目录下以使第一个解决方案工作

解决方案:
下面的命令使用Joseph提出的构建后建议,实现了使用“必需的DLL”文件夹的技巧

xcopy“$(ProjectDir)所需DLL***”$(TargetDir)”/Q/Y

/Q从输出中隐藏单个文件,而/Y则取消覆盖提示

  • 您可以使用静态库而不是动态库,这将使dll更大,但单个dll而不是多个dll只是节省时间,而且不仅仅是在您的方面
  • 将解决方案中的所有项目路由到单个目录(托管和非托管)

  • 您可以使用生成后事件来复制目录的内容(例如,“必需的DLL”目录)在C++中,C++的静态LIBS是正确的,但是我从来没有在托管C++中为它们设置项目。你们有建议或资源可以帮助我设置它吗?@守护程序,你不能做静态管理的C++ LIB,我认为你有管理的C++所需要的LIBS的问题。(这些可以是静态的)。我甚至没有考虑任何原因的后期构建事件。这对我来说非常有效,我已经发布了我在问题中使用的准确的后期构建。谢谢。