2010-08-25 189 views
35

我们正在迁移到.NET 4,并对实施新的Design By Contract功能非常感兴趣。Microsoft代码合同和CI构建服务器

我们知道Code Contract引擎需要安装的Code Contract addin alt text
和VS旗舰版或高级版(静态检查)。

这里是我的问题:

  1. 我可以使用代码重写合同没有 构建CI服务器(TeamCity的)上安装VS?
  2. 是否有任何 msbuild任务执行契约检查?
  3. 您是否使用代码合同对CI构建进行验证?
+3

我很想得到代码合同静态分析至少每晚构建,所以我会有兴趣听到人们说什么。如果存在服务器端静态分析服务,那么它也将非常酷,这样您就可以建立一个非常快速的服务器并让它进行静态分析,而不是让它慢慢地在开发机器上流失。甚至可能是静态分析云服务? – 2010-08-25 19:10:31

+0

@Dan对代码合同的静态分析起了一点作用,它非常酷。现在尝试设置TeamCity构建...以下是msbuild集成信息(第41页)http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf – 2010-08-25 19:51:39

+0

我喜欢静态分析云的想法服务。 Hrrmmmm ...也许我应该尝试构建这个。 – 2010-08-31 20:26:18

回答

46

我可以使用代码合同,不需CI构建 服务器(TeamCity的)上安装VS改写?

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

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

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

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

  4. ccdocgen.exe - 这会根据代码中的合约生成XML文档。如果您运送带有其他方消费的合同的dll,或者您只需要在代码上使用内部文档,则可能需要使用此方法。

是否有任何MSBuild任务来执行合同检查?

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

按照CodeContracts文档,

一个MSBuild脚本扩展微软 .Contract。目标包含额外的 构建操作,用于运行时合同 仪器和静态验证 的步骤。通过这种方法, 可以在使用msbuild命令从 命令行构建时使用相同的 功能。 在项目或解决方案上使用msbuild 使用通过VS 启用的合约将执行与VS中对应的构建 相同的 操作。

正如您所看到的,可以通过MSBuild目标将工具集成到CI构建中,并且可以支持这些工具。

您是否使用Code Contract对CI构建进行验证?

假设你的意思是使用警告/消息进行静态检查,我已经亲自完成了这个工作,但在一个大项目中没有这样做。

我希望这有助于!

有关命令行工具的解释,请参阅Jon Skeet的C# In Depth

+0

非常感谢。现在我们试图在TeamCity中进行设置。 – 2010-09-06 06:42:28

+1

很酷。请让我知道结果! – 2010-09-07 14:10:20

+1

注意:代码合同不再包含在C#深入书中(截至第三版) – 2015-08-26 08:29:28