TeamCity中的所有单元测试项目都无法编译,无法引用Microsoft.VisualStudio.QualityTools.UnitTestFramework

时间:2018-03-26 15:08:15

标签: unit-testing msbuild teamcity

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

"错误CS0234:类型或命名空间名称' VisualStudio'在命名空间中不存在' Microsoft' (你错过了一个装配参考吗?)"

在TeamCity(v2017.2.2)构建日志中,项目缺少Microsoft.VisualStudio.QualityTools.UnitTestFramework DLL,错误代码为 CS0234 CS0246 。我无法看到任何可能导致它的代码更改  然而,服务器重启可能会引发一些挂起的更改。

enter image description here

已检查的内容

  • 使用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 (添加到环境变量中)

enter image description here

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

3 个答案:

答案 0 :(得分: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框架。

然后在Build Step的TeamCity中,您必须将您的跑步者类型更改为 Visual Studio测试,将测试引擎类型从MSTest更改为 VSTest ,并将测试引擎版本更改为 2017年VSTest

Visual Studio Tests Configuration in TeamCity

答案 1 :(得分:1)

在各个组件下安装“ VC ++ 2017版本15.7 v14.14工具集”组件,似乎默认工具集没有单元测试二进制文件。

参考文献:

Unit test files not installed by Visual Studio Build Tools 2017

答案 2 :(得分:0)

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

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

  • Visual Studio Build Tools更新为最新版本,即将最新版本的MSBuild添加到构建服务器,并确保将其添加到OS环境路径(将默认MSBuild设置为新版本)。在我的情况下,它将它从'C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319'更改为'C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \企业\的MSBuild \ 15.0 \滨
  • 将缺少/更新的DLL添加到MSBuild BIN文件夹并将其标记为只读,以便不会再次覆盖它
  • 最后一种方法是使用gacutil.exe将DLL添加到GAC。建议不要这样做,因为它会混淆关系(而是尝试找到与Fusion logging一起使用的位置并将其添加到那里)。