参考用于CI构建的Microsoft.VisualStudio.QualityTools.UnitTestFramework

我在VS2015 RC中创建了一个C#测试项目。 它在本地构建,但是当我尝试在我们的CI构建服务器(TeamCity)上构建时,它会失败并出现错误:

UnitTest1.cs(2,17):错误CS0234:命名空间“Microsoft”中不存在类型或命名空间名称“VisualStudio”(您是否缺少程序集引用?)[D:\ BuildAgent \ work \ e486bf18e454d0c2 \ dh。 PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(9,10):错误CS0246:找不到类型或命名空间名称’TestMethod’(您是否错过了使用指令或程序集引用?)[D:\ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(9,10):错误CS0246 :找不到类型或命名空间名称’TestMethodAttribute’(您是否缺少using指令或程序集引用?)[D:\ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP。 MetadataService.Api.Tests.csproj] UnitTest1.cs(6,6):错误CS0246:找不到类型或命名空间名称’TestClass’(您是否缺少using指令或程序集引用?)[D:\ BuildAgent \工作\ e486bf18e454d0c2 \ dh.PSP.Co ordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(6,6):错误CS0246:找不到类型或命名空间名称’TestClassAttribute’(您是否缺少using指令或程序集引用?)[D:\ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj]

显然这是因为包含这些命名空间的程序集(Microsoft.VisualStudio.QualityTools.UnitTestFramework)不在构建服务器上,在我的本地计算机上它位于C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PublicAssemblies \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll。 我想我可以将程序集复制到我的解决方案中,以便它成为代码库的一部分,但手动移动文件感觉就像是一个不优雅的黑客。 我在nuget上搜索并找到了http://www.nuget.org/packages/Microsoft.VisualStudio.QualityTools.UnitTestFramework/ ,我认为这样做会有所帮助,但安装该软件包失败了:

安装包:无法安装包’Microsoft.VisualStudio.QualityTools.UnitTestFramework 11.0.50727.1’。 您正在尝试将此软件包安装到以“.NETFramework,Version = v4.5.2”为目标的项目中,但该软件包不包含任何与该框架兼容的程序集引用或内容文件

解决这个问题的最佳选择是什么? 我很惊讶在VS2015中创建一个测试项目并不会自动包含我需要的所有依赖项,尽管我可能很天真(我是一个刚刚起步的点网)。

嗯,我有一些想法,所以选择最适合您需求的想法

  1. 一个简单的答案应该是标记DLL以复制本地并在解决方案的同一文件夹中使用像Assemblies这样的文件夹并引用“Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll”
  2. 在构建服务器中安装Visual Studio。 听起来很疯狂,但它最接近“开发者机器”。
  3. 在GAC中安装DLL,这样您就不必费心了。
  4. 修复NuGet包(添加.NET Framework版本的引用)并使用它。
  5. 降级.NET Framework版本,以便可以使用NuGet包。
  6. 创建自己的NuGet服务器! (并添加您需要的DLL的引用)。

恕我直言我会选择第一个答案,因为它似乎是使用NuGet来解决所有包问题的“最佳方式”,但你使用的是一个你不知道它是否应该被信任的DLL。

在像C或C ++这样的“旧”语言中使用的系统中,通常会下载源代码和运行代码所需的库,所以我认为NuGet包不是最好的解决方案。

使用第一个选项,您始终拥有相同的版本,并且可以检查文件的MD5并确切知道构建服务器中正在运行的内容。

也许真正最好的选择应该是6.当你使用自己的NuGet服务器来处理你的DLL时,你的生活更加可怕和值得信赖。

答案类似于eng.augusto答案中的选项1。
Microsoft不为最新版本的Microsoft.VisualStudio.QualityTools.UnitTestFramework提供NuGet,但将其作为Visual Studio的一部分提供( 通常位于 C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ PublicAssemblies \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

我创建了文件夹Microsoft.VisualStudio.QualityTools作为我的解决方案的子文件夹并进行了复制

Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml

应将文件添加到源代码控制中(即使通常忽略DLL)。
然后我在Test.csproj中更改了引用以引用新位置。

对于在VS 2017中创建的项目。添加Nuget包Microsoft.VisualStudio.QualityTools.UnitTestFramework.Updated允许在CI上构建unit testing项目,而不在构建服务器上安装VS:

在此处输入图像描述