CodeContracts问题

时间:2010-11-27 17:19:22

标签: c# visual-studio visual-studio-2010 code-contracts

您好 我对CodeContracts有一点问题。我有一个类库项目,它作为一个带有方法foo的类(字符串s1,字符串s2); 在foo方法中,我有一个Contract.Requires(s1!= null)。 因此,如果我理解我的代码的含义(是的,我刚刚安装了CodeContracts并使用:),合同将在构建过程和运行时检查s1!= null表达式,抛出ArgumentException>。 我想测试行为,当我从类lib项目调用foo(null,“test”)时,设计师告诉我这个问题,但是当我从winform app项目调用它时,我没有得到任何警告错误列表窗口。那么这是否意味着代码合同只适用于它们所在的项目而不是外部? 感谢

更新


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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

如果您在winforms项目中选中了Perform Static Contract Checking,这应该会有效。如果要进行运行时检查,还要验证是否在类库项目中检查了Perform Runtime Contract Checking

此外,在您的课程库项目中,Contract Reference Assembly应设为Build

来自Code Contracts文档:

  

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

     

此合同参考装配对于使项目中的合同可用于引用项目至关重要。在没有建立合同参考组件的情况下,其他项目无法确定存在哪些合同。

答案 2 :(得分:0)

您没有编写您正在使用的Visual Studio版本。 AFAIK Code Cotnract Static Analysis仅适用于VS Premium(即标准版和专业版不够用)。