2012-02-06 53 views
15

当你开发你经常使用的东西,像优雅的方式来停止与错误版本编译

throw new NotImplementedException("Finish this off later") 

// TODO - Finish this off later 

作为占位符来提醒你完成的东西 - 不过这些都可以被错过并错误地在发布中结束。

您可以使用类似

#if RELEASE 
    Finish this off later 
#endif 

,所以它不会在发布版编译 - 但有一个更优雅的方式?

+0

创建技术债务任务(JIRA,TFS,CQ,无论)? – sll 2012-02-06 15:08:29

+0

顺便说一句,我会争辩说,这样的检查应该是构建过程的一部分,也许检查?大多数版本控制系统都有可以处理这种情况的钩子。 – Snowbear 2012-02-06 15:09:57

+1

@Snowbear所以你不要让他们检查,直到一切完成 - 或者你只是不建立一个TODO? – weston 2012-02-06 15:13:20

回答

11

我看到了一个优雅的实现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 
+0

它是如何工作的 – crazy2be 2012-02-06 20:51:44

+2

@ crazy2be - 你让你未完成的方法抛出'MustBeImplementedException'编译器指令'#if DEBUG'确保'MustBeImplementedException'类只能编译in调试,所以对于发布版本,任何被遗忘的throw都会导致构建中断,因为该类不可用。 – PHeiberg 2012-02-06 21:03:53

10

我会建议使用#warning

#warning Finish this off later 

而且在Release配置设置Treat Warnings as ErrorsTrue

在这种情况下,您将在Debug中看到它仅作为警告,但在发布时它会抛出异常。

+0

问题是我们想要忽略一些警告(例如调用现在在新版本中标记为[废弃]的API方法,但我们希望新旧版本的单一来源的方法 – Ryan 2012-02-06 15:20:03

+1

您可以配置应忽略哪些类型的警告。是相关的线程:http://stackoverflow.com/questions/267168/treat-all-warnings-as-errors-except-in-visual-studio – Samich 2012-02-06 15:32:46

1

您可以封装此在它自己的方法中,这样它只需要在一个地方换一个相关的构建。

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