【问题标题】:All Unit Test projects in TeamCity does not compile failing to reference Microsoft.VisualStudio.QualityTools.UnitTestFrameworkTeamCity 中的所有单元测试项目都无法编译,无法引用 Microsoft.VisualStudio.QualityTools.UnitTestFramework
【发布时间】:2018-03-26 15:08:14
【问题描述】:

我们所有的单元测试项目(大约 8 个)刚刚停止编译,我找不到任何好的理由。

“错误 CS0234:命名空间“Microsoft”中不存在类型或命名空间名称“VisualStudio”(您是否缺少程序集引用?)”

从 TeamCity (v2017.2.2) 构建日志中,项目缺少 Microsoft.VisualStudio.QualityTools.UnitTestFramework DLL,错误代码为 CS0234CS0246。我看不到任何可能导致它的代码更改 但是,服务器重新启动可能会引发一些待处理的更改。

已检查的内容

  • 使用 Visual Studio (SLN) 和 MSBuild 运行器步骤检查,两者都给出了相同的结果(MSBuild 之前工作正常,而 Visual Studio 在 C# 6/7 代码上失败,这是我们更改为更新的原因MSBuild 版本)
  • 如果解决方案在 Visual Studio 2017 Enterprise 中打开(安装在构建服务器上),这些测试项目可以在同一构建服务器上正常构建

项目参考配置

<Choose>
    <When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
      <ItemGroup>
        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
      </ItemGroup>
    </When>
    <Otherwise>
      <ItemGroup>
        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
      </ItemGroup>
    </Otherwise>
  </Choose>

MSBuild 版本

我们在 Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin 中使用 MSbuild v15.6.82.30579,而不是 C:\Windows\Microsoft.NET\ 中的默认版本Framework64\v4.0.30319(添加到环境变量中)

任何建议将不胜感激。如果有帮助的话,我真的不想开始向 GAC 添加 DLL。

【问题讨论】:

    标签: unit-testing msbuild teamcity


    【解决方案1】:

    如果您在服务器上使用 Build Tools 2017,并且没有安装 Visual Studio 2017,那么您必须切换到 MS Test v2:

    https://blogs.msdn.microsoft.com/devops/2017/09/01/upgrade-to-mstest-v2/ https://www.nuget.org/packages/MSTest.TestAdapter https://www.nuget.org/packages/MSTest.TestFramework

    Build Tools 不支持旧的 MS Test 框架。

    然后在 TeamCity 的 Build Step 中,您必须将运行器类型更改为 Visual Studio Tests,将测试引擎类型从 MSTest 更改为 VSTest,并将测试引擎版本更改为 VSTest 2017

    【讨论】:

    • 谢谢,我在构建服务器上安装了 Visual Studio 2017,并且 Visual Studio 测试步骤发生在解决方案构建之后,即失败发生在解决方案构建步骤中,这是运行单元测试之前的一步。我通过将 DLL 添加到 GAC(以前工作正常)解决了这个问题,VS 使用了一个公共 DLL 文件夹(在同一台服务器上成功),但在 TeamCity 构建期间没有。确实需要一个比 GAC 更易于维护的解决方案。
    • 我在构建服务器上安装了 Build Tools 2015 版,它可以成功运行。由于您的文章,MSTest V1 已从 2017 Visual Studio 和 2017 Build 工具中删除。
    【解决方案2】:

    在个别组件下安装“VC++ 2017 version 15.7 v14.14 toolset”组件,好像默认工具集没有单元测试二进制文件。

    参考资料:

    Unit test files not installed by Visual Studio Build Tools 2017

    【讨论】:

      【解决方案3】:

      好的,所以问题似乎比单元测试更广泛。简而言之,即使从 Visual Studio 运行 MSBuild 步骤的 MSbuild 和 Visual Studio 构建(从构建服务器)不使用相同的“共享”文件夹。

      我不得不使用几种不同的策略来整理版本和缺少常见的 DLL:

      • Visual Studio Build Tools 更新到最新版本,即将最新版本的 MSBuild 获取到构建服务器并确保将其添加到 OS 环境 PATH(将默认 MSBuild 设置为新版本)。在我的情况下,它将它从 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319' 更改为 'C:\Program Files (x86)\Microsoft Visual Studio\2017 \Enterprise\MSBuild\15.0\Bin'
      • 将丢失的/较新的 DLL 添加到 MSBuild BIN 文件夹并将其标记为只读,以免再次被覆盖
      • 作为最后的手段,您可以使用 gacutil.exe 将 DLL 添加到 GAC。不建议这样做,因为它会混淆关系(而是尝试找到与 Fusion logging 一起使用的位置并将其添加到那里)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-21
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-08
        相关资源
        最近更新 更多