我们正在迁移到.NET 4,并对实现新的按设计合同功能非常感兴趣。
我们知道Code Contract引擎需要安装Code Contract addin
和VS Ultimate或Premium(用于静态检查)。
以下是我的问题:
答案 0 :(得分:46)
我可以在不在CI版本上安装VS的情况下使用代码合同重写 服务器(TeamCity)?
是。在构建服务器上安装CodeContracts。 (如果拒绝在没有Visual Studio的计算机上安装,只需将下面列出的文件及其依赖项复制到构建服务器上。)安装完成后,您将在%programfiles%\ Microsoft \ Contracts \中找到安装的CodeContract工具。宾。在该目录中,您将感兴趣的是4个可执行文件:
ccrewrite.exe - 二进制重写器。这应该在编译后执行。它会将您的合同变为运行时检查或您希望它们转换为您指定的任何内容。
ccrefgen.exe - 这可以在程序集旁边生成合同引用程序集。如果您正在运送dll供其他方使用,这将非常有用。
cccheck.exe - 静态检查程序。在构建服务器上,您将在包含合同的程序集上运行此工具,并在遇到潜在问题时发出警告和消息。
ccdocgen.exe - 这会根据代码中的合同生成XML文档。如果您正在运送包含其他方消费合同的dll,或者您只需要代码的内部文档,则可能需要使用此功能。
是否有任何msbuild任务执行合同检查?
是。 CodeContracts有两个MSBuild任务:在相同的CodeContracts安装目录中,查看MSBuild \ [framework version]文件夹。在该目录中,有2个文件可以帮助您:Microsoft.CodeContracts.targets和Microsoft.CodeContractAnalysis.targets。
根据CodeContracts文档,
msbuild脚本扩展Microsoft 。合同。目标包含额外的 构建运行时契约的操作 仪器和静态验证 脚步。由于这种方法, 可以使用相同的 从中构建时的功能 命令行与msbuild命令。 在项目或解决方案上使用msbuild 使用通过VS启用的合同 用户界面将执行相同的操作 作为相应构建的动作 在VS.
如您所见,可以并且支持通过MSBuild目标将工具集成到CI构建中。
您是否使用代码合同验证CI构建?
假设您的意思是使用警告/消息进行静态检查,我个人已经完成了这项工作,但是在一个大项目中没有这样做。
我希望这有帮助!
向Jon Skeet的C# In Depth书提示解释命令行工具。