エラーのあるリリースのコンパイルを停止するエレガントな方法

あなたが開発しているときには、

throw new NotImplementedException("Finish this off later") 

または

// TODO - Finish this off later

あなたが何かを終わらせるように思い出させるためのプレースホルダーとして - しかし、これは見逃されて、間違ってリリースに終わることがあります。

次のようなものを使うことができます

#if RELEASE
   Finish this off later
#endif

so it won't compile in Release build - but is there a mまたはe elegant way?

15
@Snowbearだから、すべてが終了するまでチェックインしないでください。それとも、TODOでビルドしないだけですか?
追加された 著者 weston,
@Snowbearバックアップ、履歴、およびソース管理のその他のメリット私はリリースとしてそれを構築する前に、何週間も何週間も作業しているかもしれません。
追加された 著者 weston,
ところで、私はそのようなチェックは、おそらく代わりにチェックインを構築プロセスの一部でなければならないと主張するだろうか?バージョンコントロールシステムのほとんどは、そのようなケースを処理できるフックを持っています。
追加された 著者 Snowbear,
あなたがそれを構築しない場合チェックインのポイントは何ですか?
追加された 著者 Snowbear,
技術的負債タスク(JIRA、TFS、CQ、何でも)を作成しますか?
追加された 著者 sll,

4 答え

I saw an elegant implementation here

#if DEBUG

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

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

#endif
11
追加された
@ crazy2be - 未完成のメソッドを MustBeImplementedException にスローします。コンパイラ・ディレクティブ #if DEBUG は、 MustBeImplementedException クラスがデバッグでのみコンパイルされるようにするため、リリースビルドでは忘れたスローがあればクラスが利用不可。
追加された 著者 PHeiberg,
どのように機能するのですか?
追加された 著者 crazy2be,

#error および #warning ディレクティブを使用して、独自のビルドエラーや警告をスローすることができます。

#if RELEASE
#error Not finished!
#endif

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

10
追加された
私はそれが好きです+しかしPHeibergsの答えは使用中の1つのライナーの利点を持っているので、私は彼に答えを与えました。
追加された 著者 Ryan,

#warning を使用することをおすすめします。

#warning Finish this off later

そして、 Release の設定で 警告をエラーとして扱う True に変更します。

この場合、デバッグでは警告としてのみ表示されますが、リリースでは例外がスローされます。

10
追加された
問題は無視したいという警告があります(たとえば、新しいバージョンでは廃止されたAPIメソッドを呼び出すなど、古いバージョンや新しいバージョンの単一ソースが必要な場合など)。
追加された 著者 Ryan,
どの種類の警告を無視するかを設定できます。関連スレッド: stackoverflow.com/questions/267168/…
追加された 著者 Samich,

これを独自の方法でカプセル化することができます。つまり、リリースビルドのために1か所で変更するだけです。

void NotImplemented()
{
    #if RELEASE
        Finish this off later
    #endif
}
1
追加された