web-dev-qa-db-ja.com

testhost.dllが見つかりません。テストプロジェクトを公開して再試行してください

単一の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はテストエクスプローラーにもテストを表示していません。

45
Matt W

私の場合、問題は.NET Core 2.0を対象としていて、.NET Core 2.1に切り替えることで問題が解決したことです。ただし、15.9.0ではなくMicrosoft.NET.Test.SDK v16.4.0を使用していました。

6
Andreas

インストールMicrosoft.NET.Test.Sdk nugetパッケージマネージャーのパッケージで問題が解決しました。

51

クラスライブラリを作成し、その中でXUnit NuGetパッケージを使用しようとしました。

私がすべきことは、次のコマンドを使用してXUnitプロジェクトを作成したことです:dotnet new xunit -n TestProject

私は この役立つページ を見つけました。

16
Matt W

私の場合、問題はxunitの拡張プロジェクトがあることでした。拡張機能をテストするためのテストプロジェクトもあります。私のソリューションでdotnet testを実行すると、拡張プロジェクトも単体テストプロジェクトとしてピックアップされました(これを実現するのに少し時間がかかりました)。これは、いくつかのxunitパッケージを参照するためです。これらのxunitパッケージの1つは、csprjファイルの<IsTestProject>true</IsTestProject>プロパティを自動的に設定します。 xunitを参照するプロジェクトの99.99%は実際には単体テストであるため、これは実際には良いことです。私は最終的にこれを明示的に設定することで解決できました

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

Csprojファイルに手動で。その後、問題は消えました。

xunit.runner.visualstudioをインストールして修正しました。

8
Eugene

これは、Microsoft.NET.Test.Sdkを<TargetFramework>netcoreapp2.0</TargetFramework>でv16.2.0からv16.4.0に更新した後に発生しました。 <TargetFramework>netcoreapp3.0</TargetFramework>に更新すると問題が解決しました。

7
SteveHansen

XUnitを使用している場合は、プロジェクトタイプがnetstanderdではないことを確認してください。 xUnitはnetstanderdをサポートしていないため 、それをcoreapp2.0またはその他に変更します。

2
Raj kumar

このエラーに遭遇し、根本的な原因は、テストがWindowsパス(MAX_PATH)の最大長に達していたことでした。これは260文字として定義されています。

1
S1r-Lanzelot

Netcoreapp2.2テストプロジェクトをビルドしてから、binフォルダーからdotnet vstestを実行しようとしました。私は、Microsoft Test DLLが次の場所にあることに気付きました。

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

私のbinフォルダに出力されていませんでした。単にビルドする代わりに、出力フォルダーに必要なDLLを含むパブリッシュを代わりに実行し、そこからdotnet vstestを実行することができました。

0

Netstandard2.0をターゲットにしている場合、これは機能しません。 .NET Coreを使用している場合。 .csprojに次の行が含まれていることを確認します。

<TargetFramework>netcoreapp3.0</TargetFramework>

また、パッケージMicrosoft.NET.Test.Sdkも含まれています

0
HarryKak