Microsoft代码合同和CI构build服务器

我们正在迁移到.NET 4,并对实施新的Design By Contractfunction非常感兴趣。

正如我们所知, Code Contract引擎需要安装Code Contract插件 替代文字
和VS Ultimate或Premium(用于静态检查)。

这是我的问题:

  1. 我可以使用代码合同重写而不在CI构build服务器(TeamCity)上安装VS?
  2. 有没有任何msbuild任务来执行合同检查?
  3. 您是否使用代码合同对CI构build进行validation?

我可以在CI构build服务器(TeamCity)上使用代码合同重写而不安装VS吗?

是。 在构build服务器上安装CodeContracts。 (如果拒绝在没有Visual Studio的计算机上安装,只需将以下列出的文件及其依赖项复制到构build服务器上。)安装完成后,您会在%programfiles%\ Microsoft \ Contracts \中安装CodeContract工具。宾。 在那个目录中,有4个可执行文件,你会感兴趣的:

  1. ccrewrite.exe – 二进制重写器。 这应该在编译之后执行。 它将您的合同变成运行时检查或您希望他们变成的任何指定。

  2. ccrefgen.exe – 这可以在您的程序集旁边生成合同引用程序集。 如果您运送dll供其他方使用,这非常有用。

  3. cccheck.exe – 静态检查器。 在构build服务器上,您将在包含合同的程序集上运行此工具,并在遇到潜在问题时会吐出警告和消息。

  4. ccdocgen.exe – 这将从代码中的合约生成XML文档。 你可能想要使用这个,如果你正在运送dll合同供其他方消费,或者如果你只需要你的代码的内部文档。

有没有任何msbuild任务来执行合同检查?

是。 在CodeContracts中有两个MSBuild任务:在同一个CodeContracts安装目录中,查看MSBuild \ [framework version]文件夹。 在那个目录中,有两个文件可以帮助你:Microsoft.CodeContracts.targets和Microsoft.CodeContractAnalysis.targets。

根据CodeContracts文件,

msbuild脚本扩展Microsoft .Contract。 目标包含运行时合约检测和静态validation步骤的额外构build操作。 作为这种方法的结果,使用msbuild命令从命令行构build时可以使用相同的function。 在使用通过VS用户界面启用合同的项目或解决scheme上使用msbuild将执行与VS中相应的构build相同的操作。

正如您所看到的,可以通过MSBuild目标将工具集成到CI构build中。

您是否使用代码合同对CI构build进行validation?

假设你的意思是用警告/消息进行静态检查,我个人也是这样做的,但是在一个大项目中没有这样做。

我希望这有帮助!

Hat给Jon Skeet的C#In Depth一书中的命令行工具的解释。