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


112

我有一个具有单个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并针对两者运行。
kzu

Answers:


25

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


177

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


这已经包含在我的帖子中了-但您是对的:如果没有dotnet核心,则在运行单元测试时会遇到很大的问题。
Matt W

2
当您添加类库项目并将其转换为测试项目时,“ Microsoft.NET.Test.Sdk”是缺少的部分。也许最好的办法是添加一个新的测试项目,然后添加所需的nuget程序包,如Rhino或Moq等...
Yawar Murtaza

3
创建.NET 2.0标准的lib,添加xunitxunit.runner.visualstudioMicrosoft.NET.Test.Sdk到项目中,仍然是同样的结果。我认为还有另外一个因素在起作用……
曼弗雷德

12
我的问题是由创建netstandard2.0项目而不是netcoreapp2.2项目引起的。当我切换到后者时,它就起作用了。我唯一需要的NuGet包名xunitxunit.runner.visualstudioMicrosoft.NET.Test.Sdk
曼弗雷德

1
安装Microsoft.NET.Test.Sdk对我也不起作用,直到我做到了 dotnet clean
IGx89 '19

26

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

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

我发现这个有用的页面


3
执行此命令后,您可能要更新新项目引用的nuget包。
曼弗雷德

);或安装的NuGet xunit.runner.visualstudion到现有的项目
卢卡斯Kmoch

那是错字吗?我找不到那个。
马特W

如果您有一个现有项目,则可以通过传递其名称--force来强制其将其重建为xUnit测试项目。根据@Manfred的评论,您需要更新/重新添加您在该项目中拥有的任何项目引用。
迈尔斯

1
@MattW是的,看起来像是错字。我认为@Lukas的意思xunit.runner.visualstudio是您可以在nuget.org/packages/xunit.runner.visualstudio中
Manfred

14

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

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

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


12

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



10

如果您使用的是xUnit,请确保您的项目类型不是netstanderd。由于xUnit不支持netstanderd,请将其更改为coreapp2.0或其他版本。


这尤其是我的问题。h!我应该早点抓到的。感谢您的回复,因为它使我走上了正确的道路:)
开发负责人

将测试项目更改为.Net Core应用程序可以正确安装xunit.runner.visualstudio软件包。请注意,您可能需要关闭解决方案并重新加载它,以便VisualStudio整理出更改。
谢尔顿

9

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

  • 类库->目标.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”

此时一切恢复正常。


8

我发现一个版本存在一个非常有趣的兼容性问题。我确实按照常规做法升级了代码,然后切换到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


1
我遇到了同样的问题-解决方案中的一些测试项目。在更新到2.4.2之后,测试项目失败的常见因素是这些项目缺少Microsoft.Net.Test.Sdk(以前从来都不是问题)。添加了16.6.1 nuget,然后又恢复了工作。
bit0001

很好,我不知道。我降级,使其工作
马克西米利里奥斯

1
我已经用同样的方式修复了它。将xUnit.runner.visualstudio软件包降级到2.4.1可以解决问题。
Jacek Labuda

1
我可以确认它仍然是xunit.runner.visualstudio的2.4.3版本的问题。降级到2.4.1解决了这个问题。
bN_

1
xunit.runner.visualstudio<= 2.4.1的版本包含对的引用Microsoft.NET.Test.Sdk。更高版本没有,因此您需要将引用添加到项目中。请参阅stackoverflow.com/a/63786758/3248302
Blisco

5

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

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

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


3

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

<TargetFramework>netcoreapp3.0</TargetFramework>

并且还包含包装 Microsoft.NET.Test.Sdk


2

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


1

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


1

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

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


0

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


0

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


0

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

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

好极了!!!它的工作原理是:-)千万不要错过尝试最后一步的步骤;-)希望这会对像我这样的人有所帮助。


0

不得不加Microsoft.TestPlatform.TestHost得到testhost.dll。我在这个答案中发现https://github.com/dotnet/sdk/issues/7171#issuecomment-261506546


很高兴您给予其他人荣誉,但是在stackoverflow上,我们希望您在此处也包含足够的信息。万一您提供的Web链接有一天损坏或无效,以防万一。
tgolisch

好的,我重新访问了链接,没有任何信息可以添加到我的答案中。那我最好删除它吗?
Äkwav

1
实际上,您的回答似乎很有帮助。我不建议您删除它。社区标准建议您的答案包含信息而不是链接(改写但不not窃),因此该信息位于S / O上,而无需单击。
tgolisch

0

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

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

在我的情况下,我正在使用针对.NET Framework 4.8而不是.NET core的测试项目。虽然,我坚信此修复程序也可能适用于该平台

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.