C# 请参考Microsoft.VisualStudio.QualityTools.UnitTestFramework进行CI构建

C# 请参考Microsoft.VisualStudio.QualityTools.UnitTestFramework进行CI构建,c#,visual-studio,unit-testing,visual-studio-2015,C#,Visual Studio,Unit Testing,Visual Studio 2015,我已经在VS2015 RC中创建了一个C#test项目。它在本地构建,但当我尝试在我们的CI构建服务器(TeamCity)上构建时,它失败并出现错误: cs(2,17):错误CS0234:类型或命名空间名称 命名空间“Microsoft”中不存在“VisualStudio”(是否存在) 缺少程序集引用?) [……测试。csproj] cs(9,10):错误CS0246:类型或命名空间名称 找不到“TestMethod”(您是否缺少using指令或 组件参考?) [……测试。csproj] 显然,

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

cs(2,17):错误CS0234:类型或命名空间名称 命名空间“Microsoft”中不存在“VisualStudio”(是否存在) 缺少程序集引用?) [……测试。csproj] cs(9,10):错误CS0246:类型或命名空间名称 找不到“TestMethod”(您是否缺少using指令或 组件参考?) [……测试。csproj]

显然,这是因为包含这些名称空间(
Microsoft.VisualStudio.QualityTools.UnitTestFramework
)的程序集不在生成服务器上;在我的本地计算机上,它位于
C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\Common7\IDE\PublicAssemblys\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll

我可以将程序集复制到我的解决方案中,使其成为代码库的一部分,但手动移动文件感觉有点不雅观。我在nuget上搜索了一下,找到了我认为可以解决问题的软件包,但安装该软件包失败,原因是:

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


我解决这个问题的最佳选择是什么?我感到惊讶的是,在VS2015中创建一个测试项目并没有自动包含我需要的所有依赖项,尽管我可能很天真(我是一个初出茅庐的网络新手)。

嗯,我有一些想法,所以选择一个最适合你需要的

  • 一个简单的答案应该是将DLL标记为复制本地,并在解决方案的同一文件夹中使用类似于程序集的文件夹,并引用“Microsoft.VisualStudio.QualityTools.UnitTestFramework.DLL”
  • 在生成服务器中安装Visual Studio。听起来很疯狂,但它是最接近“开发人员机器”的
  • 安装,这样您就不必为此费心了
  • 修复NuGet包(添加对.NET Framework版本的引用)并使用它
  • 降级.NET Framework版本,以便可以使用NuGet软件包
  • 创建您自己的NuGet服务器!(并添加所需DLL的引用)
  • 我想我会选择第一个答案,因为它似乎是使用NuGet解决所有软件包问题的“最佳方式”,但您使用的是一个DLL,您不知道它是否值得信任

    在“C”或C++等“旧”语言中使用的系统,通常下载源代码和代码所需的库,所以我不认为NuGuT包是最好的解决方案。p> 使用第一个选项,您总是拥有相同的版本,可以检查文件的MD5,并确切地知道构建服务器中正在运行什么


    也许真正最好的选择应该是6。当您使用自己的NuGet服务器来处理DLL时,会使您的live更加出色和可信。

    答案与中的选项1类似。
        <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>
    
    Microsoft没有为Microsoft.VisualStudio.QualityTools.UnitTestFramework的最新版本提供NuGet, 而是将其作为VisualStudio的一部分提供 (
    C:\ProgramFiles(x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\PublicAssemblys\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允许在生成服务器上不安装VS的情况下在CI上生成单元测试项目:


    在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从本地计算机复制到dev服务器上的该文件夹中,错误消失了。

    当然,Microsoft做的是s…t工作。要解决这个问题,您需要将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>
    
    。\packages\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll
    ..\packages\Microsoft.QualityTools.Testing.Fakes.dll
    

    我不明白为什么当我们从VSudio添加这个文件时,它不会更新同一个文件,而没有人知道它会做什么。在Java中,只有一个文件pom.xml或build.gradle,没有其他文件。在C#中有各种各样的东西,除了混乱之外没有任何价值。

    到底为什么有人会记下这些?这是一个完全正确的问题。我是一个经验不足的.net开发人员,在花了相当长的时间在谷歌上搜索,但一无所获之后,我正在寻找一些关于如何改进的指导。是如此的精英主义以至于我不能这么做?真的吗?@jaimiet我也有同样的问题,在你的TeamCity代理上,你是在Linux上用Mono构建的吗?Mono不提供该库作为其发行版的一部分。如果它是Windows下的.NET,那么您可以选择在pla中使用它