Элегантный способ остановки компиляции выпуска с ошибкой

По мере развития вы часто используете такие вещи, как

throw new NotImplementedException("Finish this off later") 

или

// TODO - Finish this off later

в качестве заполнителя, чтобы напомнить вам, чтобы что-то закончилось - но они могут быть пропущены и ошибочно попадают в выпуск.

Вы можете использовать что-то вроде

#if RELEASE
   Finish this off later
#endif

поэтому он не будет компилироваться в сборке Release - но есть ли более элегантный способ?

Ответы

Ответ 1

Я видел элегантную реализацию здесь

#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

Ответ 2

Я бы рекомендовал использовать #warning:

#warning Finish this off later

И в конфигурации Release установите Treat Warnings as Errors на True.

В этом случае в Debug вы увидите его только как предупреждения, но в релизе он будет генерировать исключения.

Ответ 3

Вы можете использовать директивы #error и #warning, чтобы выбросить свои собственные ошибки сборки и предупреждения:

#if RELEASE
#error Not finished!
#endif

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

Ответ 4

Вы можете инкапсулировать это в свой собственный метод, таким образом его нужно только изменить в одном месте для сборки релиза.

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