代码之家  ›  专栏  ›  技术社区  ›  Davita

code合同问题

  •  4
  • Davita  · 技术社区  · 14 年前

    你好 我有一个关于codecontracts的小问题。我有一个类库项目,它作为一个方法foo的类(string s1,string s2); 在foo方法中,我有一个契约。需要(s1!= NULL)。 所以如果我理解我的代码的含义(是的,我刚刚安装了codecontracts和playing with:),那么合同将检查s1!=在生成过程中和运行时为空表达式,引发ArgumentException>。 我想测试这个行为,当我从类lib项目调用foo(空,“test”)时,设计器会告诉我这个问题,但是当我从winform应用程序项目调用它时,在错误列表窗口中不会收到任何警告。那么,这是否意味着代码契约只在它们所驻留的项目中工作,而不是在外部工作? 谢谢

    更新


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

    3 回复  |  直到 14 年前
        1
  •  6
  •   Davita    14 年前

    好了,伙计们,多亏了MS团队,我发现了问题。这种奇怪行为的原因是我的程序集名称以“.contracts.dll”结尾。问题是静态分析器不检查名称以该名称结尾的程序集。我重新命名了程序集,所有东西都像一个魅力,就像其他MS产品一样:)

        2
  •  2
  •   Jeff Ogata    14 年前

    如果你有,这个应该管用 Perform Static Contract Checking 已签入WinForms项目。同时验证 Perform Runtime Contract Checking 如果需要运行时检查,将签入类库项目。

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

    代码合同文件:

    如果您的项目包含合同并且被其他项目引用,我们强烈建议您在codecontracts的“属性”选项卡的“合同引用组件”部分下选择“生成”。

    此合同引用程序集对于使项目中的合同可用于引用项目至关重要。如果不构建合同引用程序集,其他项目就无法确定存在哪些合同。

        3
  •  0
  •   Registered User    14 年前

    您没有编写所使用的Visual Studio版本。 afaik code cotnract静态分析仅适用于vs premium(即,标准和专业还不够)。