微软的代码合同和CI构建服务器

35

我们正在向.NET 4迁移,非常有兴趣实现新的契约设计能力。

据我们所知,Code Contract引擎需要安装Code Contract addin和VS Ultimate或Premium(用于静态检查)。 alt text
以下是我的问题:

  1. 我可以在CI构建服务器(TeamCity)上使用代码契约重写而不安装VS吗?
  2. 是否有任何msbuild任务来执行契约检查?
  3. 您是否在CI构建中使用Code Contract的验证?

3
我很想在至少每夜构建中获取代码合约的静态分析,所以我很感兴趣听听其他人的想法。如果有一种服务器端的静态分析服务那就更好了,这样你就可以设置一个非常快速的服务器,让它托管静态分析,而不是在开发机器上缓慢地运行。甚至可能还有静态分析云服务? - Dan Bryant
@Dan 我已经尝试了一下Code Contract的静态分析,感觉非常棒。现在正在尝试设置TeamCity构建...这里是msbuild集成信息(第41页)http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf - Sergey Mirvoda
我喜欢静态分析云服务的想法。嗯......也许我应该尝试构建它。 - Judah Gabriel Himango
请查看http://stackoverflow.com/questions/7844242/c-sharp-unit-testing-integrate-nunit-mbunit-with-microsoft-pex以了解一些步骤。 - Joel Purra
1个回答

46
能否在CI构建服务器(TeamCity)上不安装VS,使用代码合约重写?
可以。需在构建服务器上安装CodeContracts。(如果它拒绝在没有Visual Studio的机器上安装,则只需将下面列出的文件及其依赖项复制到构建服务器上。)安装完成后,您将在% programfiles%\Microsoft\Contracts\Bin 中找到已安装的CodeContract工具。在该目录中,有4个您会感兴趣的可执行文件:
  • ccrewrite.exe - 二进制重写器。此应该在编译之后执行。它将使您的合约变成运行时检查或您指定的任何其他内容。

  • ccrefgen.exe - 可以在您的程序集旁生成合约引用程序集。如果您要提供给其他人使用dll,则这很有用。

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

  • ccdocgen.exe - 这从代码中的合约生成XML文档。如果您要提供带有契约的dll以供其他方使用,或者如果您只需要有关您的代码的内部文档,则可能需要使用它。

  • 是否有msbuild任务来执行合同检查?
    有。CodeContracts随附了2个MSBuild任务:在相同的CodeContracts安装目录中,查看MSBuild \ [框架版本]文件夹。在该目录中,有2个文件应该对您有所帮助:Microsoft.CodeContracts.targets和Microsoft.CodeContractAnalysis.targets。
    根据CodeContracts文档:
    msbuild脚本扩展Microsoft.Contract.targets包含运行时合同仪器和静态验证步骤的额外构建操作。由于这种方法,当使用msbuild命令从命令行构建时,可以使用相同的功能。对使用通过VS用户界面启用合同的项目或解决方案进行msbuild将执行相同

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

    您是否在CI构建中使用Code Contract的验证?

    假设您指的是带有警告/消息的静态检查,我个人已经这样做过,但还没有在大型项目上进行过。

    希望这能对您有所帮助!

    致谢Jon Skeet的C# In Depth书籍,解释了命令行工具。


    非常感谢。现在我们正在尝试在TeamCity中设置这个。 - Sergey Mirvoda
    1
    好的,请告诉我结果! - Judah Gabriel Himango
    1
    注意:代码合同不再包含在《C#深度》书籍中(自第三版起)。 - Igor Brejc

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接