我认为 Visual Studio 不会显示类库或网站项目的控制台输出。我所做的是配置 log4net 将 NHibernate 的 SQL 写入文本文件,然后在 Visual Studio 中打开该文件。通过正确的配置,VS 将通过单击窗口来显示文件的更新。
在您的 Web.config(或 app.config)中,定义 log4net 部分,让 NHibernate 很好地格式化 SQL,创建一个文本文件附加程序,并将 NHibernate 消息定向到那里:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="format_sql">true</property>
</session-factory>
</hibernate-configuration>
<log4net>
<appender name="NHibernateLogFile" type="log4net.Appender.FileAppender">
<file value="../Logs/NHibernate.log" />
<appendToFile value="false" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{HH:mm:ss.fff}%m%n==========%n" />
</layout>
</appender>
<logger name="NHibernate" additivity="false">
<level value="WARN" />
<appender-ref ref="NHibernateLogFile" />
</logger>
<logger name="NHibernate.SQL" additivity="false">
<level value="DEBUG" />
<appender-ref ref="NHibernateLogFile" />
</logger>
</log4net>
</configuration>
然后在 Visual Studio 中打开 NHibernate.Log。由于上面的 MinimalLock,Visual Studio 可以在 log4net 写入文件的同时读取文件。当您在窗口中单击时,VS 将重新加载文件。只需确保在部署网站或应用程序时将其关闭。