如何在C#中启用合同?

How to enable Contracts in C#?

提问人:RandomB 提问时间:12/25/2018 最后编辑:RandomB 更新时间:2/13/2019 访问量:300

问:

我尝试将合同包含在我的项目中,例如:

    public Segment Bounds() {
        Contract.Ensures(segments.Length > 0, "Segments are not empty");
        return new Segment(segments[0].a, segments.Last().b);
    }

我收到错误(显示为消息框),告诉我应该安装CCRewrite。我在这里得到了它,安装了,但项目设置中的“合同”选项卡没有出现,我继续收到同样的错误。我正在使用 Visual Studio 2017 Community。是否可以将合同与此版本的 Visual Studio 一起使用?

C# .NET 代码协定

评论

0赞 RandomB 12/25/2018
哦,对不起,免费版。是的,社区
0赞 RandomB 12/25/2018
有一句话“您必须下载并运行代码协定.msi文件。它安装在除 Express 版本以外的任何版本的 Visual Studio 中。 ,所以我怀疑社区版本不支持合同,仅在付费版本中支持
1赞 RandomB 12/25/2018
我发现“注意:代码协定不适用于 Visual Studio Express 版本,但适用于免费的 Visual Studio 2013 社区版”,但在 dotnetcurry.com/csharp/1172/ VS2017 github.com/Microsoft/CodeContracts/issues/476 中也存在 DbC 问题,所以似乎它必须有效,但存在问题:(
3赞 Hans Passant 12/25/2018
在这个 github 页面中,有一个很好的背景信息,说明为什么依赖合约是一个坏主意。最相关的引述:“该项目被放弃,几乎正式停止。
1赞 Lasse V. Karlsen 12/25/2018
Express 与 Community 不同。如果它真的安装在 Express 以外的任何东西中,那么它应该安装在社区中。

答:

1赞 Hermann.Gruber 2/13/2019 #1

来自 CodeContract 项目 wiki

Visual Studio 2013 是唯一支持作为代码协定生成环境的版本。

正如OP的评论中指出的,更多背景信息可以在以下问题中找到:

我有同样的问题,我打赌 CC 用于一些大型项目。尽管我很喜欢它并且会想念它,但我认为每个人都应该认真考虑尽早将它们从代码库中移除。无论是 MS 还是这里的志愿者都没有足够的承诺(我不怪他们,总是明确表示这是一项不受支持的技术)。 -- 克里斯索特

我的结论(根据@HansPassant的评论)是该项目被放弃了。