找不到 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,在项目中添加了xunit
、xunit.runner.visualstudio
和Microsoft.NET.Test.Sdk
,结果还是一样。我认为还有另一个因素在起作用......
我的问题是由创建netstandard2.0
项目而不是netcoreapp2.2
项目引起的。一旦我切换到后者,它就起作用了。我需要的唯一 nuget 包是 xunit
、xunit.runner.visualstudio
和 Microsoft.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 文件中设置 <IsTestProject>true</IsTestProject>
属性。这实际上是一件好事,因为 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】:在使用<TargetFramework>netcoreapp2.0</TargetFramework>
将 Microsoft.NET.Test.Sdk 从 v16.2.0 更新到 v16.4.0 后,这发生在我身上。更新到 <TargetFramework>netcoreapp3.0</TargetFramework>
为我解决了这个问题。
【讨论】:
【参考方案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 包含以下几行:
<TargetFramework>netcoreapp3.0</TargetFramework>
还包含包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.Testing5: 现在确保将 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 找不到所支持的音频设备 请检查您的音频设置
Flask - 404 Not found : 在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试