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

时间:2017-05-24 11:06:43

标签: c# msbuild microsoft-fakes

我正在尝试为一个项目设置自动构建和单元测试,该项目使用Fakes库进行单元测试。该项目在我的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。在我的桌面上使用此版本正确编译项目。

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

2 个答案:

答案 0 :(得分:7)

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

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

复制伪造文件夹:

  • 来自来源: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

现在建立好。谢谢McMlok。

答案 1 :(得分:4)

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

如果有C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0文件夹,则需要检查路径Fakes。如果不是,则需要安装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进行了操作,现在构建了生成假装配件。