c# - 在 .NET 项目中复制 native DLL 的最简洁方法

标签 c# dll msbuild managed-c++

我有一个引用托管 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/

相关文章:

c# - 请求建议 : How to Log WCF Web Service Request Info to a database

C# Interop.Excel 找不到 dll

msbuild - 使用 MSBuild,如何设置文件内容的属性?

visual-studio-2010 - 如何从 NAnt 获取 VS2010 Web.config 转换?

msbuild - 我可以使用 msbuild 更新非 xml 配置文件吗?

c# - SQL 用户类型问题

c# - 匹配任何 IEnumerable<T> 的通用类型参数

c# - 在每个条目后按名称排序

c - MinGW w64 缺少 dll

c++ - 如何为从 Visual Studio 2010 项目构建的 DLL 文件设置公司名称和其他属性?