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在我的构建机器上完成的,现在构建生成伪造程序集。