对于 tl;dr 人群:
- 如果代码中不是 Console.WriteLine 或 Debug.Print 语句,是什么导致类型名称写入输出窗口?它是 Visual Studio 调试器吗?和
- 我怎样才能关闭它?
背景和细节:
我正在尝试调试将 CSV 文件导入数据库的程序。最近,我更改了包含 3rd 方库依赖项的方式。以前,我引用的是下载的二进制文件。现在,如果第 3 方库有可用的源代码,例如 NHibernate,该项目将包含在我的解决方案中,以便与我自己编写的项目一起编译。
自更改以来,我在“输出/调试”窗口中看到很多单行,其中仅包含我以前没有看到的类型名称。我的程序是一个数据导入器,主循环导致这些行出现 1000 次,减慢调试速度并污染输出窗口。具体来说,有很多行是这样说的:
NHibernate.Driver.NHybridDataReader
我已经跟踪了代码,似乎每当 NHibernate 从数据库中读取结果时都会显示此代码。但是,该行不是 NHibernate 库在代码中输出的,因此它必须来自其他地方。我的猜测是 Visual Studio 调试器正在将其写入输出窗口,类似于程序集绑定期间发生的情况。
我尝试在发布模式下编译 NHibernate 项目,在调试模式下编译其他所有项目,但这并没有解决问题。我还尝试为 NHibernate 项目取消选中“启用 Visual Studio 托管进程”,但这也不起作用。
总之,我的问题是:
- 如果代码中不是 Console.WriteLine 或 Debug.Print 语句,那么将类型名称写入输出窗口是什么?和
- 我怎样才能关闭它?
我的问题不是什么
我的问题不是关于编写数据导入程序的更好方法,以便从数据库中预加载所需的数据。我知道我写的代码很慢;在这种特殊情况下,在生产中,没关系。我想要的是停止用大量不需要的类型信息污染调试窗口。我的程序的工作循环导致长 CSV 文件的类型被写入 1000 次,这使得输出难以使用,并且在尝试同步输出窗口时减慢了调试器的速度。这就是我想要阻止的。但我不知道该怎么做,因为我什至不确定消息来自哪里。