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

时间:2019-02-19 16:26:20

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

我有一个简单的dotnet核心类库,其中包含一个XUnit测试方法:

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也不会在其测试浏览器中显示测试。

19 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:8)

在我的情况下,问题是我有一个xunit扩展项目。还有一个测试项目来测试扩展。当我在解决方案上运行dotnet test时,我的扩展项目也被选为单元测试项目(花了一些时间才意识到这一点)。这样做的原因是它引用了一些xunit软件包。这些xunit软件包之一自动在您的csprj文件中设置<IsTestProject>true</IsTestProject>属性。这实际上是一件好事,因为99.99%的引用xunit的项目实际上是单元测试。我最终可以通过显式设置

来解决此问题
     <PropertyGroup>
...
        <IsTestProject>false</IsTestProject>
...
      </PropertyGroup>

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

答案 2 :(得分:8)

我已经遇到过几次了,但我总是忘记发生了什么。我最近有:

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

我的测试项目的软件包:

  • Moq-> 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”

此时一切恢复正常。

答案 3 :(得分:7)

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

答案 4 :(得分:7)

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

我的评论之一后的其他信息。

软件包xunit.runner.visualstudio版本<= 2.4.1包括对Microsoft.NET.Test.Sdk的引用。更高版本没有,因此您需要在项目中添加引用。

请参阅stackoverflow.com/a/63786758/3248302

答案 5 :(得分:6)

通过安装xunit.runner.visualstudio修复了该问题。

答案 6 :(得分:6)

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

答案 7 :(得分:5)

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

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

没有输出到我的bin文件夹中。我运行的不仅仅是发布,而是在输出文件夹中包含了必需的DLL,然后我可以从那里运行dotnet vstest

答案 8 :(得分:5)

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

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

我找到了this helpful page

答案 9 :(得分:3)

如果您以netstandard2.0为目标,则将无法使用。如果正在使用.NET Core。确保.csproj包含以下几行:

<TargetFramework>netcoreapp3.0</TargetFramework>

,还包含软件包Microsoft.NET.Test.Sdk

答案 10 :(得分:2)

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

答案 11 :(得分:1)

就我而言,问题是我瞄准了.NET Core 2.0,并切换到.NET Core 2.1解决了该问题。但是我使用的是Microsoft.NET.Test.SDK v16.4.0,而不是15.9.0。

答案 12 :(得分:1)

如果将xunit.runner.visualstudio升级到大于2.4.1的版本,则会发生此错误。直到2.4.1及更高版本的版本都包含对Microsoft.NET.Test.Sdk的引用,但更高版本没有,因此您需要在自己的项目中包含引用。

有趣的是,我发现即使无法通过CLI运行NCrunch,我仍然可以在没有其他参考的情况下运行测试。

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

答案 15 :(得分:0)

这也可能是由于无意中尝试运行非测试项目而引起的,通常发生在测试文件过滤器过大的情况下。

答案 16 :(得分:0)

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

  • 第1步:安装Microsof.TestPlatform.TestHost并尝试运行测试,但没有成功。
  • 第2步:将.NET Core 2.0的目标框架更改为2.1,并尝试运行测试,但没有成功。
  • 第3步:关闭并打开VS2017,然后尝试运行。

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

答案 17 :(得分:0)

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

答案 18 :(得分:0)

就我而言,有必要使用 nuget 包含对 MsTest.TestAdapter 模块的引用。

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

注意到在我的情况下,我使用的是面向 .NET 框架 4.8 而不是 .NET 核心的测试项目。虽然,我坚信此修复程序也可能适用于该平台