【问题标题】:Adding a C++ project with a C# wrapper to a C# solution in Visual Studio 2015 [duplicate]将带有 C# 包装器的 C++ 项目添加到 Visual Studio 2015 中的 C# 解决方案 [重复]
【发布时间】:2016-08-02 07:56:20
【问题描述】:

当您在 Visual Studio 中将 C# 项目引用(我们称之为 LibraryProject)添加到另一个 C# 项目 (MainProject) 时,程序集 LibraryProject.dll 会自动复制到 MainProject 输出目录,从而启用它在 MainProject 中的使用无需进一步的用户干预。 如果 LibraryProject 是 C++ 项目,如何以可靠且独立于项目的方式进行操作? - 也就是说,无需手动指定构建后事件来复制生成的 DLL(哪个位置取决于多个其他设置)到主项目目录(该位置也取决于某些设置,甚至在单个解决方案中可能有多个可运行程序集[测试项目、控制台工具等],只有部分或全部需要访问 LibraryProject )?

或者,如示例中所述:

在我的解决方案中有一个 C++ 库项目 (MyCppLibrary),以及该库的 C# 包装器项目 (MyCSharpWrapper)。还有一个主 C# 项目 (MyCSharpApplication) 和一个 C# 单元测试项目 (MyCSharpTests)。

当我从 MyCSharpApplicationMyCSharpTests 引用 MyCSharpWrapper 时,我希望不仅有 MyCSharpWrapper.dll ,但也将 MyCppLibrary.dll 复制到 MyCSharpApplication 和/或 MyCSharpTests 的相应输出目录(或以其他方式可访问)。我希望这一切都自动发生,而无需在 MyCSharpApplicationMyCSharpTests 上设置构建后事件来半手动复制 DLL。

编辑: 我不是在问如何从 C# 调用 C++ 代码 - 我知道 DllImportAttribute 以及如何使用它。当 MyCSharpWrapper 从另一个项目中引用时,我想知道如何指示 Visual Studio 自动将 MyCppLibrary.dll 复制到输出目录。

【问题讨论】:

  • 我记得唯一的方法是创建一个 dll 文件并对其进行引用,或者使用 dllimport 语句,因为库是 c# 以外的其他语言

标签: c# .net visual-studio visual-c++ interop


【解决方案1】:

如果我理解要求,您希望确保将 C++ DLL 复制到作为 C# 项目的输出目录的位置,以便您可以直接使用 IDE 调试。

这应该可以通过简单地在 C# 和 C++ 项目的项目属性中指定一个公共输出文件夹(例如 $(SolutionDir)\BuildRel)来实现 - https://msdn.microsoft.com/en-us/library/ms165410.aspx。这会将所有二进制文件放在同一位置,因此运行时链接应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多