找不到 testhost.dll。请发布您的测试项目并重试

Posted

技术标签:

【中文标题】找不到 testhost.dll。请发布您的测试项目并重试【英文标题】:Unable to find testhost.dll. Please publish your test project and retry 【发布时间】: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 并针对两者运行。 【参考方案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://***.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 的引用。更高版本没有,因此您需要添加对项目的引用。见***.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

【讨论】:

很高兴您给予其他人信任,但在 *** 上,我们希望您在此处也包含足够的信息。以防万一您提供的网络链接有一天损坏/无效。 好的,我重新访问了链接,没有信息可以添加到我的答案中。那么我应该更好地删除它吗? 实际上,您的回答似乎很有帮助。我不建议你删除它。社区标准建议您的答案包含信息而不是链接(意译但不抄袭),因此信息在 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。为此,请使用以下方法之一:

    在 Project Explorer 中转到 Dependencies –> NuGet 并找到 Sdk 包。右键单击它并选择“属性”。从 ExcludeAssets 字段中删除“All”。 或者编辑您的 .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 才能解决问题。

【讨论】:

以上是关于找不到 testhost.dll。请发布您的测试项目并重试的主要内容,如果未能解决你的问题,请参考以下文章

找不到 Git 命令。请创建一个别名或将其添加到您的 PATH [重复]

找不到对象!在此服务器上找不到请求的 URL。如果您手动输入网址,请检查您的拼写并重试

Adobe Audition3.0 找不到所支持的音频设备 请检查您的音频设置

为啥在 regex char 可选时找不到匹配项

Flask - 404 Not found : 在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试

Transportert添加APP时提示:找不到合适的应用程序记录。请验证您的捆绑标识符“xxx”是否正确。