首页 文章

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

提问于
浏览
20

我在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'(你错过了吗? using指令或程序集引用?)[D:\ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(9,10):error 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 . Coordinator.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/,我认为这样可以解决问题,但是安装该软件包失败了:

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

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

3 回答

  • 2

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

    • 一个简单的答案应该是标记DLL以复制本地,并在解决方案的同一文件夹中使用像Assemblies这样的文件夹并引用"Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll"

    • 在构建服务器中安装Visual Studio . 听起来很疯狂,但它最接近"developer machine" .

    • 安装DLL in the GAC,这样您就不必费心了 .

    • 修复NuGet包(添加.NET Framework版本的引用)并使用它 .

    • 降级.NET Framework版本,以便可以使用NuGet包 .

    • 创建自己的NuGet服务器! (并添加您需要的DLL的引用) .

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

    在用于“旧”语言(如C或C)的系统中,通常会下载源代码和运行代码所需的库,因此我认为NuGet包不是最佳解决方案 .

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

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

  • 2

    答案类似于eng.augusto's answer中的选项1 .
    Microsoft不为最新版本的Microsoft.VisualStudio.QualityTools.UnitTestFramework提供NuGet,但将其作为Visual Studio的一部分提供(normally at 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中更改了引用以引用新位置 .

  • 2

    对于在VS 2017中创建的项目 . 添加Nuget包Microsoft.VisualStudio.QualityTools.UnitTestFramework.Updated允许构建单元测试项目在构建服务器上未安装VS的CI:

    enter image description here

相关问题