c# - 运行时加载的程序集中没有用于 Generic.List 的调试可视化工具

标签 c# visual-studio debugging assemblies

我能够为加载了“Assembly.LoadFile”的 .NET dll 设置断点并检查变量,但是,出于某种原因,通用列表的可视化工具不显示任何元素(如下所示)。当我将鼠标悬停在变量上时,监 window 口中显示的内容相同。

我已经检查了这些不同的解决方案,但似乎没有一个有效(而且它们似乎主要处理甚至无法调试 dll):

Debug dynamically loaded assembly

Debug dynamically loaded assembly in Visual Studio .NET

我将 pdb 与 dll 并排放置(从它加载的确切位置)。我还将那个 dll 的 pdb 文件放在正在加载的可执行文件旁边,但仍然没有骰子。我正在调试中编译,并将所有配置设置为 x86。需要注意的一件事是,如果我实际上将添加 dll 作为引用,则调试可视化工具会完美显示(但是,这是一个插件架构,exe 不应该依赖于 dll)。

有什么想法吗?

[编辑]

事实证明我不能只将插件添加为引用,我必须在我的 exe 中实际实例化该类型的列表才能正确显示,不确定发生了什么...

[编辑]

我制作了这个展示行为的示例项目。我使用了与我加载插件的方式类似的代码(尽管很有趣,只是直接调用 Assembly.LoadFile 并通过反射调用方法似乎不会导致这种行为。我在这里压缩了示例项目:(其他人有没有得到结果相同?)

http://dl.dropbox.com/u/64502227/PluginLoader.zip

[编辑]

另一个有趣的发展!我在 exe 旁边有一个插件文件夹,所有的 dll 都放在那里。目前,我正在将插件 dll/pdb 复制到 exe 目录和 Plugins 子目录中。如果我使用 Assembly.LoadFile 并使用插件目录中的 dll,我将丢失我自己类型的列表可视化工具。如果我在 exe 旁边加载 dll,它可以工作,但为什么呢?

我看到的:

enter image description here

最佳答案

解决方案 A:

  • 从 exe 目录而不是它们自己的目录加载所有 dll。

解决方案 B:

使用它来创建插件:

Plugin plugin = (Plugin)Activator.CreateInstance(assembly.FullName, "SamplePlugin.MyPlugin").Unwrap();

代替这个:

Plugin plugin = (Plugin)Activator.CreateInstance(assembly.GetType("SamplePlugin.MyPlugin"));

我认为第二行代码实际上只是在内部被第一行代码调用(例如,第一行必须按名称查找程序集,然后从中找到类型“SamplePlugin.MyPlugin”它,然后 Unwrap() 它返回它),但显然不是。

不幸的是,这是解决问题的办法,但它没有回答为什么会这样。如果有人知道,我仍然会非常感谢这些信息。

关于c# - 运行时加载的程序集中没有用于 Generic.List 的调试可视化工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360103/

相关文章:

visual-studio - Visual Studio 不中断异常助手,只是停止进程

visual-studio - Nuget 无法更新 .NET Core 项目

r - 要求 R 调试器不要截断堆栈调用

c# - 在c#windows phone 7中计算PM和AM之间的时间差

c# - 如何在 ASP.NET Core 中启用跟踪日志记录?

c# - "Runtime error Exception has been thrown by the target of an invocation"来自脚本任务

c# - 我可以在使用 Visual Studio 时自动增加文件构建版本吗?

c# - 链接时 IAuthenticationHandler 出现错误 XA2006

debugging - 如何强制 IntelliJ 只进入我的源代码?

javascript - 检查脚本被调用的位置/哪一行或文档