为什么我的 C# 程序集在从本机 C++ 应用程序加载时无法进行调试?

Why isn't my C# assembly able to be debugged when loaded from a native C++ application?

我有一个非托管 C++ 应用程序,它依赖于 C# 程序集(通过 COM 交互)。

当我通过 VS 调试器 运行 我的本机 C++ 应用程序时,C# 代码中的断点被禁用并出现错误,没有加载任何符号。从这个问题中,我发现要查看模块 window: How do I remedy the "The breakpoint will not currently be hit. No symbols have been loaded for this document." warning?

但是,我的 C# 程序集 DLL 没有列在模块列表中。当应用程序在调试器中启动时,我的 C# 程序集在加载和使用时未在输出 window 中提及。 C++ 只是 C# 代码的简单包装器,因此无法调试 C# 代码是一个问题。我无法附加到进程,因为 C# 代码在程序集中而不是单独的应用程序中。

这个问题似乎是类似的话题,但是情况相反,所以我没有看到任何解决方案:"The breakpoint will not currently be hit" error while debugging a mixed mode application (c# and unmanaged c++)

当我的托管 C# 代码被非托管本机 C++ 应用程序使用时,有没有办法调试我的托管 C# 代码?

基于 CodeCaster 的评论:

You need to be debugging managed code (Attach to -> Select), and you're probably not. Is your assembly already loaded and the CLR running when you attach the debugger

我找到了解决办法。如果我通过调试器启动应用程序,托管程序集的符号不会在启动时加载;该程序集仅在其中一种类型通过 COM 实例化时才加载。

如果我将调试器附加到一个已经 运行 的进程,则托管程序集已经加载,现在一切都按预期工作。如果你想在启动时设置断点是不理想的,但它是一个可行的解决方案。