【问题标题】:Reference Microsoft.VisualStudio.QualityTools.UnitTestFramework for CI build参考 Microsoft.VisualStudio.QualityTools.UnitTestFramework 进行 CI 构建
【发布时间】:2015-08-16 04:45:51
【问题描述】:

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

UnitTest1.cs(2,17):错误 CS0234:类型或命名空间名称 命名空间“Microsoft”中不存在“VisualStudio”(您是 缺少程序集参考?) [... .Tests.csproj] UnitTest1.cs(9,10):错误 CS0246:类型或命名空间名称 找不到“TestMethod”(您是否缺少 using 指令或 装配参考?) [... .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 中创建一个测试项目并不会自动包含我需要的所有依赖项,尽管我可能很天真(我是一个初出茅庐的点网员)。

【问题讨论】:

  • 为什么会有人标记这个?这是一个完全有效的问题。我是一个缺乏经验的 .net 开发人员,在花费了相当长的时间在谷歌上搜索并没有得到任何结果之后,我正在寻找一些关于如何进步的指导。如此精英主义以至于我不被允许这样做吗?认真的吗?
  • @jaimiet 我遇到了同样的问题,在您的 TeamCity 代理上,您是在 Linux 上的 Mono 下构建的吗? Mono 不提供该库作为其分发的一部分。如果它是 Windows 下的 .NET,那么您有几种选择可以将其安装到位。

标签: c# visual-studio unit-testing visual-studio-2015


【解决方案1】:

答案类似于eng.augusto's answer中的选项1。
Microsoft 不为最新版本的Microsoft.VisualStudio.QualityTools.UnitTestFramework, 提供 NuGet 而是将其作为 Visual Studio 的一部分提供 (normally atC:\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】:

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

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

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

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

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

    也许真正的最佳选择应该是 6。当您使用自己的 NuGet 服务器来处理您的 DLL 时,让您的生活更加精彩和可信。

    【讨论】:

    • 或者你可以通过使用 xunit、nunit 来避免所有的恐惧......任何不是来自微软的东西。
    • 我在我拥有的几个项目中遇到了这个问题,这些项目实际上使用了 NUnit,但是一些测试项目附带了一些参考资料。直到我将它们放入我们的 TeamCity 系统后,我才意识到。
    【解决方案3】:

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

    【讨论】:

    【解决方案4】:

    在我们的 IT 团队要求我从我们的开发服务器上卸载 VS2013 之后,我在尝试通过我们的 CI/CD 流程在我们的开发服务器上使用 MSBuild 时遇到了这个问题。

    在我的构建输出中,有几行带有 Considered 字样。这意味着构建是考虑文件可能所在位置的那些文件夹。其中一行如下:

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

    【讨论】:

      【解决方案5】:

      当然,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# 中,有各种各样的东西除了混淆之外没有任何价值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-17
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 2014-12-26
        • 1970-01-01
        • 1970-01-01
        • 2019-08-02
        相关资源
        最近更新 更多