Элегантный способ остановки компиляции выпуска с ошибкой
По мере развития вы часто используете такие вещи, как
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
}