CodeContracts问题

你好,我有一个关于CodeContracts的小问题。 我有一个类库项目作为一个类的方法foo(字符串s1,字符串s2); 在foo方法中,我有一个Contract.Requires(s1!= null)。 所以,如果我理解我的代码的含义(是的,我刚刚安装了CodeContracts并使用:),合同将在构建过程和运行时检查s1!= null表达式,并引发ArgumentException>。 我想测试行为,当我从类lib项目中调用foo(null,“test”)时,设计者告诉我这个问题,但是当我从winform应用项目调用它时,我没有收到任何警告错误列表窗口。 那么这是否意味着代码合同只能在他们居住的项目中工作,而不在外面? 谢谢

UPDATE


我忘了提及我添加的前提条件在静态分析中不起作用。 但是他们会在运行时用合适的消息抛出ArgumentException。


好吧,谢谢MS团队,我发现了这个问题。 这种奇怪行为的原因是我的程序集名称以“.Contracts.dll”结尾。 问题是静态分析器不检查名称以此结尾的程序集。 我重命名了程序集,所有东西都像魅力一样工作,就像任何其他MS产品一样:)


如果您在winforms项目中选中了“ Perform Static Contract Checking这应该有效。 如果需要运行时检查,请确认在您的类库项目中选中了Perform Runtime Contract Checking

另外,在您的类库项目中,“ Contract Reference Assembly应设置为“ Build

从代码合同文档:

如果您的项目包含合同并被其他项目引用,我们强烈建议您在CodeContracts的属性选项卡的合同参考集合部分下选择Build。

此合同参考大会对于使项目中的合同可用于参考项目至关重要。 在没有建立合同参考大会的情况下,其他项目无法确定出现哪些合同。


你没有写出你使用的是哪个版本的Visual Studio。 AFAIK代码Cotnract静态分析仅适用于VS Premium(即标准版和专业版是不够的)。

链接地址: http://www.djcxy.com/p/23737.html

上一篇: CodeContracts issue

下一篇: Is this a bug in the Code Contracts rewriter?