C# 在代码中在发布和调试之间切换

C# 在代码中在发布和调试之间切换,c#,visual-studio,debugging,release,C#,Visual Studio,Debugging,Release,我发布了我的应用程序,我想添加额外的“管理”功能。 我看到了很多调试信息,当我在调试模式下运行我的应用程序时,为了有一个更清晰的应用程序,所有这些都会在发布模式下删除 现在,如果我登录到我的应用程序,我想检查登录名和密码,例如,当我使用“Admin”、“password”登录时,我也想查看调试信息 问题: 是否可以在代码中从发行版切换到调试版?简短的回答是否,因为编译器会为调试版和发行版生成不同的程序集。如果开发人员添加了编译时条件代码,某些代码可能会丢失,例如 #if DEBUG Di

我发布了我的应用程序,我想添加额外的“管理”功能。 我看到了很多调试信息,当我在调试模式下运行我的应用程序时,为了有一个更清晰的应用程序,所有这些都会在发布模式下删除

现在,如果我登录到我的应用程序,我想检查登录名和密码,例如,当我使用“Admin”、“password”登录时,我也想查看调试信息

问题:


是否可以在代码中从发行版切换到调试版?

简短的回答是否,因为编译器会为调试版和发行版生成不同的程序集。如果开发人员添加了编译时条件代码,某些代码可能会丢失,例如

#if DEBUG
    DisableSharingWithPrism();
#endif
只在调试代码中运行编译代码。在释放模式下,代码将不存在

要解决此问题,请编写一个方法来确定用户是否是管理员,并使用此方法查找并替换
#if DEBUG
调用,例如:

if (UserIsAdmin())
{
    DisableSharingWithPrism();
}

这取决于在调试模式下如何呈现附加信息。如果将其包含在“#ifdef DEBUG”中,则代码不会在发布版本中编译,因此由于它不在dll中,因此无法执行

要将调试信息放入发布版本中,基本上您必须替换

#if DEBUG
    OutputSomeDebugInfo();
#endif 

其中“GlobalFlags”是一个静态公共类,您必须使用静态bool成员或属性“IsDebugMode”创建该类,只有在使用管理员登录或进行调试生成时,该类才会设置为true


日志记录和跟踪工具(如log4net或企业库)旨在为您提供细粒度、可配置的控制,以控制应用程序中记录的内容,因此您可能也想查看这些工具。

是的,但不必是不同的版本。它必须在带有大量if检查的代码中设置。很有可能您高估了具有管理员权限的人想要查看调试信息的愿望。除非你还打算把你的源代码和程序一起发送,否则这是让这些额外信息有用的唯一方法。在这种情况下,您可能需要不同的部署策略。感谢您的回答,我已经在使用#if DEBUG语句来隐藏或显示组件,我想在用户以管理员身份登录时进行切换,但我发现这是不可能的,所以我需要以另一种方式进行切换。
if (GlobalFlags.IsDebugMode)
{
    OutputSomeDebugInfo();
}