根据this feature matrix,Visual Studio 2010 Premium(RC)包含“静态代码分析”。
但是,在我的方法开头添加对Contract.Requires
的调用似乎没有任何效果。如果合同被违反,我不会得到运行时异常。如果无法证明合同,我不会收到编译器警告。我也找不到项目设置中的“代码合同”选项卡。
我是否遗漏了一些显而易见的内容,或者此功能仅在Ultimate版本中提供?
答案 0 :(得分:3)
对于VS2010的beta 2,甚至VS2010本身的框架中是否包含Code Contracts,似乎确实存在一些混淆。 Code Contracts forum(以及特别是this帖子)有几个提及,目前还没有答案。
我不认为Code Contracts属于静态代码分析的标题。我认为静态代码分析涉及其他代码分析工具,如FxCop。
我尝试在VS2010 beta 2终极版中使用Contract.Requires
,但我得到了与你相同的行为。如果查看“代码分析”选项卡下的项目属性,则可以启用代码分析,但这与代码约定无关。
根据连接文章Make data contract static checking available in Professional Edition上Melitta(来自基类图书馆小组)的评论:
...但静态分析工具的限制代表即将发布的版本。它使代码分析故事保持一致,因为静态分析工具需要VSTS。
这表明您(将)必须拥有团队系统版本才能获得代码合同的编译时版本。
答案 1 :(得分:3)
要在Beta 2中进行静态分析,您必须从MSDN DevLabs下载并安装代码合同位(1.2.21023.14或更高版本)。然后在项目属性下,现在会有一个Code Contracts选项卡......从这里你可以打开静态分析......
您所看到的行为是因为Code Contracts API位于mscorlib程序集中,它允许断言起作用,但没有别的。
我认为RTM不需要这样做。
答案 2 :(得分:1)
您需要在项目属性中打开代码合同运行时检查。如果该设置窗格不存在,则需要安装Microsoft的Code Contracts下载(尽管框架中存在Contract.Requires)。
专业版仅提供运行时检查。