没有Visual Studio的Microsoft代码合同

Rob*_*Rob 9 msbuild teamcity visual-studio-2010 code-contracts

这个堆栈溢出问题:

Microsoft Code Contracts和CI构建服务器

询问如何在不安装Visual Studio 2010的情况下获取在构建服务器上运行的代码契约.我们正在尝试这样做.我们已按照接受的答案中列出的步骤进行操作,但未能使其正常运行.

除非存在Visual Studio,否则CodeContracts不会安装在构建服务器上.所以按照这个建议,我们已经完成了以下工作:

  1. 我们将%programfiles%\Microsoft\Contracts\Bin安装了Visual Studio 2010 Ultimate和Code Contracts Premium的开发计算机的内容复制到构建服务器.
  2. 我们还复制了MSBuild\v4.0包含Microsoft.CodeContracts.targets和的文件夹Microsoft.CodeContractAnalysis.targets.

根据CodeContracts文档,

在使用通过VS用户界面启用的合同的项目或解决方案上使用msbuild将执行与VS下相应构建相同的操作.

这是我们的用例,我们只是在我们的解决方案文件中调用MSBuild,如下所示.解决方案文件是通过Visual Studio创建的,并配置了所有预期的代码协定选项以进行重写.

<Target Name="Release">
  <MSBuild Projects = "Cofamilies\WebApplication\CofamiliesWeb.sln" Properties="Configuration=Release" />
</Target>
Run Code Online (Sandbox Code Playgroud)

但重写者没有被召唤.

有没有人建议我们缺少什么和/或建议的故障排除步骤?

Gid*_*sey 10

最新版本的Code Contracts我遇到了同样的问题.我在构建服务器上的开发PC和标准版上安装了Premium Edition,并且由于重写器未运行而出现以下错误.

使用Contract.Requires <TException>时必须使用重写器

看来标准版缺少MSBuild调用重写器所需的密钥文件(CodeContractsAfter.targets).

我的解决方案是将CodeContractsAfter.targets从我的开发PC上的C:\ Program Files(x86)\ MSBuild\4.0\Microsoft.Common.Targets\ImportAfter复制到构建服务器上的相应文件夹.

注意:路径不相同,因为我的开发PC运行的是Windows 7 64位,而构建服务器运行的是Windows Server 2003 32位.因此,您需要确定适合您环境的路径.

如果您不使用Premium Edition,CodeContractsAfter.targets文件的内容为:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Begin CodeTools: CodeContracts: After -->
  <PropertyGroup>
    <CodeContractsInstallDir Condition="'$(CodeContractsInstallDir)'==''">C:\Program Files (x86)\Microsoft\Contracts\</CodeContractsInstallDir>
  </PropertyGroup>
  <Import Condition="'$(CodeContractsImported)' != 'true' AND '$(DontImportCodeContracts)' != 'true'" Project="$(CodeContractsInstallDir)MsBuild\v4.0\Microsoft.CodeContracts.targets" />

  <!-- End CodeTools: CodeContracts: After -->
</Project>
Run Code Online (Sandbox Code Playgroud)

只需将上面的内容粘贴到提到的ImportAfter文件夹的文件夹中即可.