我在VS2015 RC中创建了一个C#测试项目。它在本地构建,但是当我尝试在我们的CI构建服务器(TeamCity)上构建时,它失败并出现错误:
UnitTest1.cs(2,17):错误CS0234:类型或命名空间名称 “VisualStudio”在名称空间“Microsoft”中不存在(是吗? 缺少程序集引用?) [d:\ BuildAgent \工作\ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(9,10):错误CS0246:类型或命名空间名称 找不到“TestMethod”(你是否错过了使用指令或 装配参考?) [d:\ BuildAgent \工作\ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(9,10):错误CS0246:类型或命名空间名称 找不到“TestMethodAttribute”(你是否错过了使用 指令或程序集引用?) [d:\ BuildAgent \工作\ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(6,6):错误CS0246:类型或命名空间名称 找不到'TestClass'(你是否错过了使用指令或 装配参考?) [d:\ BuildAgent \工作\ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs(6,6):错误CS0246:类型或命名空间名称 找不到'TestClassAttribute'(你错过了使用吗? 指令或程序集引用?) [d:\ BuildAgent \工作\ 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中创建一个测试项目并不会自动包含我需要的所有依赖项,但也许我很天真(我是一个刚刚起步的点网)。
答案 0 :(得分:3)
答案类似于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中更改了引用以引用新位置。
答案 1 :(得分:2)
嗯,我有一些想法,所以选择最适合您需求的想法
恕我直言,我选择了第一个答案,因为它似乎是最好的方式"使用NuGet来解决你所有的软件包问题,但你使用的是一个你不知道它是否应该被信任的DLL。
用于" old"像C或C ++这样的语言,您可以下载代码运行所需的源代码和库,所以我认为NuGet包不是最好的解决方案。
使用第一个选项,您始终拥有相同的版本,并且可以检查文件的MD5并确切知道构建服务器中正在运行的内容。
也许真正最好的选择应该是6.当您使用自己的NuGet服务器来处理您的DLL时,让您的生活更加精彩和值得信赖。
答案 2 :(得分:2)
对于在VS 2017中创建的项目。添加Nuget包Microsoft.VisualStudio.QualityTools.UnitTestFramework.Updated允许在CI上构建单元测试项目,而不在构建服务器上安装VS:
答案 3 :(得分:0)
在我们的IT团队要求我从开发服务器上卸载VS2013之后,尝试通过CI / CD流程在开发服务器上使用MSBuild时遇到了这个问题。
在我的构建输出中,有几行带有已考虑一词。这意味着该版本正在考虑这些文件夹以查找文件可能位于的位置。这些行之一如下:
Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll", but it didn't exist.
我从本地计算机上将 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 复制到开发服务器上的该文件夹中,错误消失了。
答案 4 :(得分:0)
当然,Microsoft做得很好。要解决此问题,您需要将dll的文件复制到某些提示文件中,然后从ptoject .csproj文件中引用它们。
<HintPath>..\packages\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Reference Include="QualityTools-Fakes">
<HintPath>..\packages\Microsoft.QualityTools.Testing.Fakes.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
我不明白为什么我们从VSudio添加此文件时不会更新同一文件,而是没人知道它会做什么。在Java中,只有一个文件pom.xml或build.gradle,仅此而已。在C#中,有各种各样的东西,除了混乱之外没有其他价值。