まずVisualStudioに、拡張機能を追加する。
そして、コンソールアプリケーションを新規作成する。
using System.Diagnostics.Contracts;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 3;
            int b = 2;
            Console.WriteLine("{0} / {1} = {2}", a, b, Program.Div(a, b));
            Console.ReadLine();
        }
        public static int Div(int a, int b)
        {
            
            Contract.Requires(b != 0);                  // 入力の契約
            Contract.Ensures(Contract.Result() >= 0);   // 出力の契約
            return a / b;
        }
    }
}
プロジェクトのプロパティに、見慣れないものが??
わざとb=0にしてコンパイルすると・・・
実行しなくても、ちゃんと契約違反を見つけてくれる!
面白い機能なのだが、漫坊的には採用NGの判定となった。
ExpressEditionでビルドができて、MSBuildで自動化ができるようになったら、再び検討してみるつもりである。
わざとb=0にしてコンパイルすると・・・
static void Main(string[] args)
{
    int a = 3;
    int b = 0;
    
    Console.WriteLine("{0} / {1} = {2}", a, b, Program.Div(a, b));
    Console.ReadLine();
}
実行しなくても、ちゃんと契約違反を見つけてくれる!
面白い機能なのだが、漫坊的には採用NGの判定となった。
- ExpressEditionでコンパイルできない
 べつに拡張機能が使えるようにしろよ、とか言うつもりはないが、開発関係者全員がプロ版を使えるわけではないので、これは痛い。
 ソースの関連行が無効になってくれたらよいのだが。
- 重い
 こんな小さなソースでも、7秒くらいかかる。まるでVS2012のWPFデバッグ開始みたいだ。とても毎回実行したいと思わない。
ExpressEditionでビルドができて、MSBuildで自動化ができるようになったら、再び検討してみるつもりである。



 
0 件のコメント:
コメントを投稿