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