【问题标题】:Microsoft Code Contracts without Visual Studio没有 Visual Studio 的 Microsoft 代码合同
【发布时间】:2010-11-27 10:53:51
【问题描述】:

这个堆栈溢出问题:

Microsoft Code Contracts and CI build server

询问如何在不安装 Visual Studio 2010 的情况下让代码合同在构建服务器上运行。我们正在尝试做同样的事情。我们已按照接受的答案中概述的步骤进行操作,但无法使其正常工作。

除非存在 Visual Studio,否则 CodeContracts 不会安装在构建服务器上。所以按照建议,我们做了以下事情:

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

根据 CodeContracts 文档,

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

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

<Target Name="Release">
  <MSBuild Projects = "Cofamilies\WebApplication\CofamiliesWeb.sln" Properties="Configuration=Release" />
</Target>

但是重写器没有被调用。

是否有人对我们缺少的内容和/或建议的故障排除步骤提出建议?

【问题讨论】:

    标签: visual-studio-2010 msbuild teamcity code-contracts


    【解决方案1】:

    我在使用最新版本的代码合同时遇到了同样的问题。我在我的开发 PC 上安装了高级版,在构建服务器上安装了标准版,由于重写器未运行而出现以下错误。

    使用时必须使用重写器 Contract.Requires

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

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

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

    如果您使用的不是高级版,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>
    

    只需将以上内容粘贴到上述ImportAfter文件夹中的文件中即可。

    【讨论】:

    • 这帮助我在没有安装 VS,只有 MSBuild 12.0 的 Jenkins 构建服务器上进行构建
    【解决方案2】:

    这是我的solution。 它基于issue #368stackoverflow:Microsoft Code Contracts without Visual Studio

    1. 从 nuget 添加 DotNet.Contracts
    2. 将以下代码添加到您的项目文件中:
    <PropertyGroup>
      <CodeContractsInstallDir Condition="'$(CodeContractsInstallDir)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\packages\DotNet.Contracts.1.10.20606.1\'))</CodeContractsInstallDir>`
    </PropertyGroup>
    <Import Condition="'$(CodeContractsImported)' != 'true' AND '$(DontImportCodeContracts)' != 'true'" Project="$(CodeContractsInstallDir)\MsBuild\v$(VisualStudioVersion)\Microsoft.CodeContracts.targets"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-10
      • 2019-12-31
      • 2011-09-29
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      相关资源
      最近更新 更多