MSBuild 15 – 命名空间中不存在类型或命名空间“Fakes”

我正在尝试为一个项目设置自动构建和unit testing,该项目使用Fakes库进行unit testing。 该项目在我的Windows 10 PC(安装了VS 2017 Enterprise)上构建和测试正常,但是使用相同的命令在构建服务器(也是VS 2017 Enterprise的Windows 10)上编译项目会产生关于Fakes not existing的几个错误。 确切的错误如下所示:

XControllerTests.cs(10,20): error CS0234: The type or namespace 'Fakes' does not exist in the namespace 'System.Data.Common' (are you missing an assembly reference?) [C:\Runner\builds\xxx\XTests.csproj]

根据我的研究,这是由使用旧版本的MSBuild引起的,但是我检查了服务器,并确认它已安装了visual studio的最新版本和更新。 我还确认构建脚本使用的是正确版本的MSBuild.exe,即c:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe 。 在我的桌面上使用此版本正确编译项目。

为什么构建不能在(相同的设置)构建服务器上运行?

为了扩展@McMlok上面的答案,我将包括我所做的。

  • 来源:我当地的VS2017 Premium Update 1开发机器。
  • 目标:VS2017构建工具VM。

复制Fakes文件夹:

  • 来自: c:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\
  • 目标: c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\VisualStudio\v15.0\

复制Microsoft.QualityTools.Testing.Fakes.ImportAfter.targets文件:

  • 来自: c:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Microsoft.Common.targets\ImportAfter\
  • 目标: c:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Microsoft.Common.Targets\ImportAfter\

复制Microsoft.QualityTools.Testing.Fakes.dll文件:

  • 来自: c:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblies\
  • 目标: GAC / %windir%\Microsoft.NET\assembly

现在建立得很好。 谢谢麦克默克。

我有一些解决方法,但它不优雅。

如果有C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0文件夹,则需要检查路径C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0 。 如果不是,则需要安装TestTools工作负载或从其他计算机进行复制。

接下来你需要检查C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Microsoft.Common.Targets\ImportAfter如果有文件Microsoft.QualityTools.Testing.Fakes.ImportAfter.targets如果没有从另一台机器复制它。 在这个文件中是用于包括伪造目标以构建进程的代码。

最后,您需要检查GAC中是否有汇编Microsoft.QualityTools.Testing.Fakes.dll或MSBuild找到它的其他位置。

这是我使用MS Build Tools 2017在我的构建机器上完成的,现在构建生成伪造程序集。