我发布了我的应用程序,我想向它添加额外的“管理”功能。我看到很多调试信息,当我在调试模式下运行我的应用程序时,所有这些都在发布模式下被删除,以获得更清晰的应用程序。
现在,如果我登录到我的应用程序,我想检查登录名和密码,例如,当我使用“Admin”、“Password”登录时,我也想查看调试信息。
问题:
是否可以在代码中从发布切换到调试?
我发布了我的应用程序,我想向它添加额外的“管理”功能。我看到很多调试信息,当我在调试模式下运行我的应用程序时,所有这些都在发布模式下被删除,以获得更清晰的应用程序。
现在,如果我登录到我的应用程序,我想检查登录名和密码,例如,当我使用“Admin”、“Password”登录时,我也想查看调试信息。
问题:
是否可以在代码中从发布切换到调试?
简短的回答是否定的,因为编译器会为调试和发布版本生成不同的程序集。如果开发人员添加了编译时条件代码,某些代码可能会丢失,例如
#if DEBUG
DisableSharingWithPrism();
#endif
只会在调试代码中运行编译代码。在发布模式下,代码将不存在。
为了解决这个问题,编写一个方法来确定用户是否是管理员,并#if DEBUG
使用此方法查找并替换调用,例如:
if (UserIsAdmin())
{
DisableSharingWithPrism();
}
这取决于您如何在调试模式下呈现这些附加信息。如果您将它包含在“#ifdef DEBUG”中,则代码不会在发布版本中编译,因此由于它不在 dll 中,因此无法执行。
要将调试信息放入发布版本中,基本上您必须替换
#if DEBUG
OutputSomeDebugInfo();
#endif
和
if (GlobalFlags.IsDebugMode)
{
OutputSomeDebugInfo();
}
其中“GlobalFlags”是您必须使用静态 bool 成员或属性“IsDebugMode”创建的静态公共类,只有在使用管理员登录或进行调试构建时才会设置为 true。
日志和跟踪工具(如 log4net 或来自企业库)旨在让您对应用程序中记录的内容进行细粒度、可配置的控制,因此您可能也想查看这些。