【问题标题】:#if DEBUG directive#if DEBUG 指令
【发布时间】:2014-06-06 21:15:56
【问题描述】:
   #if DEBUG
                        mailMessage = new MailMessage("someEmail.com", "someEmail.com", subject, messsageBody);
   #else
                        mailMessage = new MailMessage(Membership.GetUser().Email, cppAccount.Email, subject, messsageBody);
   #endif

我有上面的代码,但即使我在发布时发布它仍然使用调试语句。这是一个 mvc4 c# 项目,此代码在我的模型类之一中。

【问题讨论】:

  • 你如何告诉 VS 构建发布版本?
  • 您应该将其存储在您的 web.config 文件中。
  • 如果您的意思是这样,我的解决方案配置将设置为发布。在 VB 中,每次我切换解决方案配置时它都会变灰。
  • 您是在说 web.config 中的这一行 还是我需要在我的 web.config 中定义它?
  • 发布的时候可以选择一个配置,至少在vs2012中,你有没有在发布窗口把你的发布设置为Release

标签: c# compiler-directives


【解决方案1】:

这不是您尝试的最佳方式。 例如,您应该在 web.config 中使用应用设置来执行此操作。

<add key="MailMessageEnabled" value="true" />

然后在你的 cs 文件中执行类似的操作 -

bool isEnabled = bool.Parse(ConfigurationManager.AppSettings["MailMessageEnabled"]);
mailMessage = isEnabled ? new MailMessage(Membership.GetUser().Email, cppAccount.Email, subject, messsageBody) 
            : new MailMessage("someEmail.com", "someEmail.com", subject, messsageBody);

并且您可以将配置的值在默认 web 配置中设置为 true,在发布 web 配置中设置为 false

【讨论】:

  • 所以基本上你所说的与 vb.net 不同,编译器指令不能很好地工作。或者这仅仅是因为我可以从部署的 dll 外部修改设置?
  • 编译器指令有效,但 IMO 从 DLL 外部进行控制比每次必须重新编译测试时都更灵活,如果这样做,您可以通过更改快速测试 ON 和 OFF价值。
【解决方案2】:

正如 MoXplod 所说,您应该在 web.config 文件中执行此操作,但我认为使用 Transformation 更好,这样您就可以使用开发和 web.Release 所需的值来调试 web.config 文件.config 您可以在 PROD 环境中获得所需的值。查看http://msdn.microsoft.com/en-us/library/dd465326(v=vs.110).aspx 了解有关转换的信息。

【讨论】:

  • 如果我在 webconfig 中执行此操作,则可以通过任何方式进行转换。就像以前对实时和开发应用程序所做的那样。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
相关资源
最近更新 更多