我有一些简单的WebAPI模型/存储库/控制器。
我可以使用以下方法在浏览器中测试这些星期五:
http://localhost:48614/api/departments/
...将在浏览器页面中返回测试部门数据。
现在,同样的尝试失败了:
这真的是这样吗?我需要跳过这些箍,上周我的简单测试运行得很好吗?
答案 0 :(得分:3)
(请注意,我不是CC的专家,但是我在StackOverflow上玩一个。其中一些陈述可能稍微不正确)
Code Contracts不仅仅是您引用和调用的程序集中的方法集合,以便执行验证。代码约定是一组类型和工具,实际上在编译后重写IL 以执行静态和运行时检查。您可以阅读有关此重写器here的更多信息。
它们仍然不是框架或Visual Studio的官方部分。在工作之前你必须download and install the tooling for visual studio。
可编辑的ASP.NET网站在首次加载时执行aspx / cshtml文件的编译。由于Code Contracts要求重写已编译的程序集,因此必须将其包含在ASP.NET编译阶段中。我不知道该怎么做(我会访问论坛获取该信息),但绝对不会发生魔术。
该错误表明在VS或ASP.NET中未正确执行编译。无论哪种方式,修复它的唯一方法是完全抛弃CC,或者执行对话框所说的内容。
我会注意到Daniel Cazzulino有一些类似CC的代码可以通过nuget获得,其中包含许多与Code Contracts类似的帮助方法。像Assert.NotNull(someArgument, "someArgument");
这样的事情。如果您搜索他的帐户,您可以找到它们。
答案 1 :(得分:2)
使用非泛型版本的Contract.Requires,因此不需要IL重写。文档涉及到这一点。