【问题标题】:Elegant way to stop release compilation with error停止发布编译错误的优雅方法
【发布时间】:2012-02-28 01:10:09
【问题描述】:

在开发过程中,您经常使用诸如

之类的东西
throw new NotImplementedException("Finish this off later") 

// TODO - Finish this off later

作为一个占位符,提醒您完成某些事情 - 但这些可能会被遗漏并错误地出现在发布中。

你可以使用类似的东西

#if RELEASE
   Finish this off later
#endif

所以它不会在 Release 构建中编译 - 但有更优雅的方式吗?

【问题讨论】:

  • 创建技术债务任务(JIRA、TFS、CQ 等)?
  • 顺便说一句,我认为这种检查应该是构建过程的一部分,也许可以代替检查?大多数版本控制系统都有可以处理这种情况的钩子。
  • @Snowbear 所以在一切完成之前你不要让他们签入——或者你只是不使用 TODO 构建它?
  • @weston,是的,如果您不构建它,签入有什么意义?
  • @Snowbear 备份、历史记录以及源代码控制的所有其他好处。在将其构建为一个版本之前,我可能会花费数周或更长时间来完成某项工作。

标签: c#


【解决方案1】:

我建议使用#warning:

#warning Finish this off later

并且在Release 配置中将Treat Warnings as Errors 设置为True

在这种情况下,在 Debug 中,您只会将其视为警告,但在发布时会引发异常。

【讨论】:

  • 问题是有一些我们想忽略的警告(例如,在新版本中调用现在标记为 [obsolete] 的 API 方法,但我们希望旧/新版本的单一来源。
  • 您可以配置应该忽略哪些类型的警告。这是相关线程:stackoverflow.com/questions/267168/…
【解决方案2】:

您可以使用#error#warning 指令来抛出您自己的构建错误和警告:

#if RELEASE
#error Not finished!
#endif

http://msdn.microsoft.com/en-us/library/c8tk0xsk(v=vs.80).aspx

【讨论】:

  • 我非常喜欢它 + 但 PHeibergs 的答案有一个使用中的优点,所以我给了他答案。
【解决方案3】:

我看到了一个优雅的实现here

#if DEBUG

namespace FakeItEasy
{
    using System;
    using System.Diagnostics.CodeAnalysis;

    /// <summary>
    /// An exception that can be thrown before a member has been
    /// implemented, will cause the build to fail when not built in 
    /// debug mode.
    /// </summary>
    [Serializable]
    [SuppressMessage("Microsoft.Design",   
        "CA1032:ImplementStandardExceptionConstructors", 
        Justification = "Never used in production.")]
    public class MustBeImplementedException
        : Exception
    {
    }
}

#endif

【讨论】:

  • @crazy2be - 你让你未完成的方法抛出MustBeImplementedException。编译器指令#if DEBUG 确保MustBeImplementedException 类仅在调试中编译,因此对于发布构建,任何忘记的抛出都将导致构建中断,因为该类不可用。
【解决方案4】:

您可以将其封装在它自己的方法中,这样只需在一个地方更改它即可进行发布构建。

void NotImplemented()
{
    #if RELEASE
        Finish this off later
    #endif
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2019-11-10
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多