【发布时间】:2020-07-21 19:22:53
【问题描述】:
我有一个用 C++ 编写的运行时(嵌入了 Mono),它使用 mono_jit_exec 和 mono_runtime_invoke 调用用 C# 编写的 dll 中的函数。胶水代码是用CppSharp 生成的——我认为这里不相关,只是提一下。
到目前为止一切都很好,我可以双向交流。
我现在想要的是仅使用 Visual Studio 调试 C# 代码(我在 macOS 上使用的是 2019 版)。所以在我的 C# 项目中,我转到 Run Configuration 并选择了指向我的 C++ 程序集的 Start external program 选项。之后,我设置了一些断点,但是当我在调试模式下运行 C# 项目时,它们从未被触发。
为什么不工作 - 还有其他需要做的事情吗?是因为涉及到 Mono 吗?
【问题讨论】:
-
因为 VS 只有其 .NET Framework 和 .NET Core 兼容的调试器,不适用于 Mono。在这样的一天(Mono 即将消失),您可能应该尝试嵌入 .NET Core docs.microsoft.com/en-us/dotnet/core/tutorials/netcore-hosting
-
为什么说 Mono 会消失?这似乎是一个活跃的项目。除此之外,我需要将我的 C++ 方法暴露给 C# 并使用
DllImport("__Internal")直接调用它们,而 .NET Core 不提供此类功能。 -
.NET 5 将成为统一选项,在 .NET Core 与 Mono CLR 合并之后。如果不迁移到 .NET 5,Mono 的其他组件将很快消失。 MonoDevelop 已经走到了尽头,还有其他指标。因此,如果您想避免浪费精力,请立即开始使用 .NET Core。
-
我明白你的意思,这绝对是需要考虑的事情,因为我现在开始进行这种集成。问题是:有没有办法像我使用 Mono 一样使用 .NET Core 直接从 C# 调用主机方法?我不想跑题,所以我创建了一个new question。