【问题标题】:Unable to find testhost.dll. Please publish your test project and retry找不到 testhost.dll。请发布您的测试项目并重试
【发布时间】:2019-07-13 05:27:21
【问题描述】:

我有一个带有单个 XUnit 测试方法的简单 dotnet 核心类库:

TestLib.csproj:
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.SDK" Version="15.9.0" />
    <PackageReference Include="xunit" Version="2.4.1" />
    <PackageReference Include="xunit.runner.console" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="xunit.runners" Version="2.0.0" />
  </ItemGroup>

</Project>

BasicTest.cs:
using Xunit;

namespace TestLib
{
    public class BasicTest
    {
        [Fact(DisplayName = "Basic unit test")]
        [Trait("Category", "unit")]
        public void TestStringHelper()
        {
            var sut = "sut";
            var verify = "sut";

            Assert.Equal(sut, verify);
        }
    }
}

如果我在 CLI 上输入项目并键入 dotnet build,项目将构建。如果我输入 dotnet test 我会得到:

C:\git\Testing\TestLib> dotnet test
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build started, please wait...
C:\git\Testing\TestLib\TestLib.csproj : warning NU1701: Package 'xunit.runner.visualstudio 2.4.1' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETStandard,Version=v2.0'. This package may not be fully compatible with your project.
Build completed.

Test run for C:\git\Testing\TestLib\bin\Debug\netstandard2.0\TestLib.dll(.NETStandard,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 16.0.0-preview-20181205-02
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Unable to find C:\git\Testing\TestLib\bin\Debug\netstandard2.0\testhost.dll. Please publish your test project and retry.

Test Run Aborted.

我需要更改哪些内容才能运行测试?

如果有帮助,VS Code 也不会在其测试资源管理器中显示测试。

【问题讨论】:

  • 在我的情况下,您实际上无法针对 netstandard2.0 运行测试,因为这是 API 定义,而不是运行时。如果您将 TFM 切换到 net472,一切正常。或者,例如,您可以多目标到 netcore+net472 并针对两者运行。

标签: c# unit-testing .net-core xunit.net


【解决方案1】:

从 nuget 包管理器安装 Microsoft.NET.Test.Sdk 包解决了我的问题。

【讨论】:

  • 这已经包含在我的帖子中 - 但你是对的:如果没有它,使用 dotnet core 运行单元测试会出现大问题。
  • “Microsoft.NET.Test.Sdk”是您添加类库项目并将其转换为测试项目时缺少的部分。最好的办法可能是添加一个新的测试项目,然后添加所需的 nuget 包,如 Rhino 或 Moq 等......
  • 创建了.NET Standard 2.0 lib,在项目中添加了xunitxunit.runner.visualstudioMicrosoft.NET.Test.Sdk,结果还是一样。我认为还有另一个因素在起作用......
  • 我的问题是由创建netstandard2.0 项目而不是netcoreapp2.2 项目引起的。一旦我切换到后者,它就起作用了。我需要的唯一 nuget 包是 xunitxunit.runner.visualstudioMicrosoft.NET.Test.Sdk
  • 安装 Microsoft.NET.Test.Sdk 对我也不起作用,直到我做到了dotnet clean
【解决方案2】:

就我而言,问题在于我的目标是 .NET Core 2.0,而切换到 .NET Core 2.1 解决了这个问题。但是我使用的是 Microsoft.NET.Test.SDK v16.4.0 而不是 15.9.0。

【讨论】:

    【解决方案3】:

    我创建了一个类库并尝试在其中使用 XUnit NuGet 包。

    我应该做的是使用以下命令创建一个 XUnit 项目:dotnet new xunit -n TestProject

    我找到了this helpful page

    【讨论】:

    • 执行此命令后,您可能需要更新新项目引用的 nuget 包。
    • 或者将 nuget xunit.runner.visualstudio 安装到现有项目中;)
    • 是错字吗?我找不到那个。
    • 如果你有一个现有的项目,你可以用--force 传递它的名字来强制它把项目重建为一个xUnit测试项目。根据@Manfred 的评论,您需要更新/重新添加您在该项目中拥有的任何项目引用。
    • @MattW 是的,这看起来像是一个错字。我认为@Lukas 的意思是xunit.runner.visualstudio,您可以在nuget.org/packages/xunit.runner.visualstudio找到它
    【解决方案4】:

    就我而言,问题是我有一个 xunit 的扩展项目。还有一个测试项目来测试扩展。当我在我的解决方案上运行dotnet test 时,我的扩展项目也被选为一个单元测试项目(我花了一些时间才意识到这一点)。原因是它引用了一些 xunit 包。这些 xunit 软件包之一会自动在您的 csprj 文件中设置 &lt;IsTestProject&gt;true&lt;/IsTestProject&gt; 属性。这实际上是一件好事,因为 99.99% 的引用 xunit 的项目实际上都是单元测试。我终于可以通过明确设置来解决这个问题

         <PropertyGroup>
    ...
            <IsTestProject>false</IsTestProject>
    ...
          </PropertyGroup>
    

    手动在我的 csproj 文件中。然后问题就解决了。

    【讨论】:

      【解决方案5】:

      我发现了一个非常有趣的版本兼容性问题。我确实按照正常做法升级了我的代码,然后我切换到了 xUnit.runner.visualstudio 2.4.2。它停止为 .Net Core 3.1 工作。我不得不降级到 2.4.1,它又开始工作了。

      我的一个 cmets 之后的附加信息。

      包 xunit.runner.visualstudio 版本

      https://stackoverflow.com/a/63786758/3248302

      【讨论】:

      • 我遇到了同样的问题 - 对于我的解决方案中的一些测试项目。更新到 2.4.2 后测试项目失败的共同因素是这些项目缺少 Microsoft.Net.Test.Sdk(以前从未出现过问题)。添加了 16.6.1 nuget 并重新开始工作。
      • 很好,我不知道。我降级以使其正常工作
      • 我以同样的方式修复了它。将 xUnit.runner.visualstudio 包降级到 2.4.1 即可解决问题。
      • 我可以确认这仍然是 xunit.runner.visualstudio 2.4.3 版的问题。降级到 2.4.1 解决了这个问题。
      • xunit.runner.visualstudio 版本 Microsoft.NET.Test.Sdk 的引用。更高版本没有,因此您需要添加对项目的引用。见stackoverflow.com/a/63786758/3248302
      【解决方案6】:

      我遇到过几次这种情况,但我总是忘记发生了什么。最近我有:

      • 类库 -> 面向 .NET Core 3.0
      • 测试项目 -> 面向 .NET Core 3.1

      我的测试项目的包:

      • 起订量 -> 4.14.1
      • xUnit -> 2.4.1
      • xUnit.Runner.VisualStudio -> 2.4.2

      我看到了:

      找不到 C:\PATH\bin\Debug\netstandard2.0\testhost.dll。请发布您的测试项目并重试。

      我需要做的就是将缺失的 nuget 包添加到我的测试项目中: "Microsoft.NET.Test.SDK"

      此时一切都恢复正常了。

      【讨论】:

        【解决方案7】:

        在使用&lt;TargetFramework&gt;netcoreapp2.0&lt;/TargetFramework&gt; 将 Microsoft.NET.Test.Sdk 从 v16.2.0 更新到 v16.4.0 后,这发生在我身上。更新到 &lt;TargetFramework&gt;netcoreapp3.0&lt;/TargetFramework&gt; 为我解决了这个问题。

        【讨论】:

          【解决方案8】:

          如果您使用的是 xUnit,请确保您的项目类型不是 netstanderd。 As xUnit doesn't support netstanderd,改成coreapp2.0或者其他吧。

          【讨论】:

          • 这尤其是我的问题。嗬!我应该早点抓住它。感谢您的回复,因为它让我走上了正确的道路:)
          • 将测试项目更改为 .Net Core 应用程序允许 xunit.runner.visualstudio 包正确安装。请注意,您可能需要关闭解决方案并重新加载它,以便 VisualStudio 整理更改。
          【解决方案9】:

          通过安装xunit.runner.visualstudio修复它。

          【讨论】:

            【解决方案10】:

            我正在构建一个 netcoreapp2.2 测试项目,然后尝试从 bin 文件夹运行 dotnet vstest。我注意到 Microsoft 测试 DLL 来自:

            <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.0.1" />
            

            没有输出到我的 bin 文件夹。我不只是构建,而是运行了一个发布,它确实在输出文件夹中包含了必要的 DLL,然后我能够从那里运行 dotnet vstest

            【讨论】:

              【解决方案11】:

              必须添加Microsoft.TestPlatform.TestHost 才能获得testhost.dll。 我发现在这个答案https://github.com/dotnet/sdk/issues/7171#issuecomment-261506546

              【讨论】:

              • 很高兴您给予其他人信任,但在 stackoverflow 上,我们希望您在此处也包含足够的信息。以防万一您提供的网络链接有一天损坏/无效。
              • 好的,我重新访问了链接,没有信息可以添加到我的答案中。那么我应该更好地删除它吗?
              • 实际上,您的回答似乎很有帮助。我不建议你删除它。社区标准建议您的答案包含信息而不是链接(意译但不抄袭),因此信息在 S/O 上,无需点击。
              【解决方案12】:

              如果您的目标是 netstandard2.0,这将不起作用。如果使用的是 .NET Core。确保 .csproj 包含以下几行:

              &lt;TargetFramework&gt;netcoreapp3.0&lt;/TargetFramework&gt;

              还包含包Microsoft.NET.Test.Sdk

              【讨论】:

                【解决方案13】:

                如果您将xunit.runner.visualstudio 升级到高于 2.4.1 的版本,则可能会出现此错误。 2.4.1 及之前的版本包含对Microsoft.NET.Test.Sdk 的引用,但更高版本不包含,因此您需要在自己的项目中包含该引用。

                有趣的是,我发现 NCrunch 仍然在没有额外参考的情况下运行我的测试,即使我无法通过 CLI 运行它们。

                【讨论】:

                  【解决方案14】:

                  我发现 5 个因素 至关重要。
                  (其中 3 个以混合变体分布在其他答案中。)

                  1 到 4:
                  在适用于您的 .NET Core 版本的版本中添加这些 Nuget 包:

                  • xunit
                  • Microsoft.NET.Test.Sdk
                  • xunit.runner.visualstudio
                  • Microsoft.AspNetCore.Mvc.Testing

                  5:
                  现在确保将 Microsoft.NET.Test.Sdk 设置为 NOT ExcludeAssets。为此,请使用以下方法之一:

                  1. 在 Project Explorer 中转到 Dependencies –> NuGet 并找到 Sdk 包。右键单击它并选择“属性”。从 ExcludeAssets 字段中删除“All”。
                  2. 或者编辑您的 .csproj 文件并从 SDK 包条目中删除 ExcludeAssets="All"(如果存在):
                  <!-- Bad: -->
                  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" ExcludeAssets="All" />
                  <!-- Good: -->
                  <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
                  

                  【讨论】:

                  • 简单安装了 Microsoft.NET.Test.Sdk xunit.runner.visualstudio,它对我有用。谢谢!
                  【解决方案15】:

                  我在 Nunit (.net core 3.1) 项目中遇到了同样的问题。 我使用的是 Microsoft.NET.Test.SDK v16.6.1,我将版本降级到 15.9.0。 它开始工作

                  【讨论】:

                    【解决方案16】:

                    遇到此错误,根本原因是测试达到了 Windows 路径 (MAX_PATH) 的最大长度,该路径定义为 260 个字符。

                    【讨论】:

                      【解决方案17】:

                      这也可能是由于无意中尝试运行非测试项目造成的,这通常发生在您的测试文件过滤器过宽时。

                      【讨论】:

                        【解决方案18】:

                        在尝试调试单元测试时遇到此错误。以下是我尝试的步骤。

                        • 第 1 步:安装 Microsof.TestPlatform.TestHost 并尝试运行测试但没有成功。
                        • 第 2 步:将 Target framework 从 .NET Core 2.0 更改为 2.1,并尝试运行测试,但没有成功。
                        • 第 3 步:关闭并打开 VS2017 并尝试运行。

                        耶!!!有效 :-) 千万不要错过尝试最后一步 ;-) 希望这对像我这样的人有所帮助。

                        【讨论】:

                          【解决方案19】:

                          如果您通过克隆运行项目,则解决方案是安装 Microsoft.NET.Test.Sdk。 如何 : 工具>Nuget 包管理器>为解决方案管理 Nuget 包...>搜索 Microsoft.NET.Test.Sdk 并为您的测试项目安装。

                          【讨论】:

                            【解决方案20】:

                            在我的例子中,有必要使用 nuget 包含对 MsTest.TestAdapter 模块的引用。

                            使用 MSTest.TestFramework 和 Microsoft.Net.Test.Sdk 的新项目不足以运行单个单元测试。

                            注意到在我的案例中,我使用的是针对 .NET 框架 4.8 而不是 .NET 核心的测试项目。不过,我坚信此修复程序也可能适用于该平台

                            【讨论】:

                              【解决方案21】:

                              就我而言,这是一个愚蠢的错误。我也在我的源项目中引用了xunit(不仅在我的测试项目中)

                              在我的源项目中删除 xunit 依赖项解决了这个问题。

                              【讨论】:

                                【解决方案22】:

                                我使用的是 .NET Core Framework 6.0,我必须将 Microsoft.NET.Test.Sdk 从版本 17.1.0 降级到 16.5.0 才能解决问题。

                                【讨论】:

                                  猜你喜欢
                                  • 2021-06-14
                                  • 2020-01-06
                                  • 1970-01-01
                                  • 2015-03-13
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2017-11-02
                                  • 1970-01-01
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多