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.

テストを実行するには何を変更する必要がありますか?

それが役立つ場合、VSCodeはテストエクスプローラーにもテストを表示していません。


私の場合、netstandard2.0はランタイムではなくAPI定義であるため、実際にはnetstandard2.0に対してテストを実行できないということでした。TFMをnet472に切り替えると、問題なく動作します。または、たとえばnetcore + net472をマルチターゲットにして、両方に対して実行することもできます。
kzu

回答:


25

私の場合、問題は.NET Core 2.0をターゲットにしていて、.NET Core2.1に切り替えることで問題が解決したことでした。ただし、15.9.0ではなくMicrosoft.NET.Test.SDKv16.4.0を使用していました。


175

Microsoft.NET.Test.Sdknugetパッケージマネージャーからパッケージをインストールすると、問題が解決しました。


それはすでに私の投稿に含まれていました-しかし、あなたは正しいです:それなしでdotnetコアでユニットテストを実行することには大きな問題があります。
マット

2
「Microsoft.NET.Test.Sdk」は、クラスライブラリプロジェクトを追加してそれをテストプロジェクトに変換したときに欠落していた部分でした。おそらく行うための最善のことは...新しいテストプロジェクトが続いなどのRhinoや部品番号などの必要なnugetパッケージを追加追加することです
Yawar Murtaza

3
作成された.NET標準2.0 libに、追加xunitxunit.runner.visualstudioおよびMicrosoft.NET.Test.Sdkプロジェクト、まだ同じ結果に。私はさらに別の要因が
マンフレッド

12
私の場合の問題は、netstandard2.0プロジェクトではなくプロジェクトを作成することによって引き起こされましたnetcoreapp2.2。後者に切り替えるとすぐに機能しました。私は必要なだけnugetパッケージはなかったxunitxunit.runner.visualstudioMicrosoft.NET.Test.Sdk
マンフレッド

1
Microsoft.NET.Test.Sdkのインストールも、私が行うまでは機能しませんでした dotnet clean
IGx 8919年

26

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

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

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


3
このコマンドを実行した後、新しいプロジェクトが参照するnugetパッケージを更新することをお勧めします。
マンフレッド

または、nuget xunit.runner.visualstudionを既存のプロジェクトにインストールします;)
LukášKmoch20年

それはタイプミスですか?見つかりません。
マット

既存のプロジェクトがある場合は、その名前を渡して--force、プロジェクトをxUnitテストプロジェクトとして再構築するように強制できます。@Manfredのコメントによると、そのプロジェクトにあったプロジェクト参照を更新/再追加する必要があります。
マイルズ

1
@MattWはい、タイプミスのようです。@Lukasはxunit.runner.visualstudionuget.org / packages / xunit.runner.visualstudio
Manfred

14

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

     <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などに変更してください。


これは特に私の問題でした。ドー!もっと早く捕まえるべきだった。それが私を正しい道に導いたのであなたの応答に感謝します:)
開発リーダー

テストプロジェクトを.NetCoreアプリに変更すると、xunit.runner.visualstudioパッケージを正しくインストールできるようになりました。VisualStudioで変更を整理するには、ソリューションを閉じて再読み込みする必要があることに注意してください。
シェルドン

9

私はこれに数回遭遇しました、そして私はいつも何が起こっているかを忘れます。最近私が持っていた:

  • クラスライブラリ->。NET Core3.0をターゲットにする
  • テストプロジェクト->。NET Core3.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」をテストプロジェクトに追加することだけでした。

この時点ですべてが正常に戻りました。


8

バージョンとの非常に興味深い互換性の問題を見つけました。通常の方法と同じようにコードをアップグレードし、xUnit.runner.visualstudio2.4.2に切り替えました。.Net Core3.1では機能しなくなりました。2.4.1にダウングレードする必要があり、再び機能し始めました。

私のコメントの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を追加し、再び機能するようになりました。
bit00 0120年

いいですね、私はそれを知りませんでした。私はそれを機能させるためにダウングレードしました
MaximilianoRios20年

1
同じように修正しました。xUnit.runner.visualstudioパッケージを2.4.1にダウングレードすると、問題が解決しました。
JacekLabuda20年

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を参照してください。
ブリスコ

5

私はnetcoreapp2.2テストプロジェクトを構築していdotnet vstestて、binフォルダーから実行しようとしていました。Microsoft TestDLLが次の場所にあることに気づきました。

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

binフォルダーに出力されていませんでした。ビルドするだけでなく、出力フォルダーに必要なDLLを含む発行を実行したところdotnet vstest、そこから実行できるようになりました。


3

netstandard2.0をターゲットにしている場合、これは機能しません。.NETCoreを使用している場合。.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が含まれていますが、それ以降のバージョンには含まれていないため、独自のプロジェクトに参照を含める必要があります。

興味深いことに、CLIを介してテストを実行できなかったにもかかわらず、NCrunchが追加の参照なしでテストを実行していることがわかりました。


0

クローン作成によってプロジェクトを実行している場合、ソリューションはMicrosoft.NET.Test.Sdkをインストールすることです。方法:[ツール]> [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が見つかりました


他の人にクレジットを与えているのはいいことですが、ここスタックオーバーフローでは、ここにも十分な情報を含めることをお勧めします。あなたが与えたウェブリンクがいつか壊れたり無効になったりした場合に備えて。
tgolisch

さて、私はリンクを再訪しました、私の答えに追加する情報はありません。それなら削除したほうがいいですか?
Äkwav

1
実際、あなたの答えは役に立ったようです。私はあなたがそれを削除することを提案していません。コミュニティの基準では、回答にリンクではなく情報を含めることを推奨しています(言い換えますが、盗用はしません)。そのため、情報はクリックスルーせずにS / Oにあります。
tgolisch

0

私の場合、nugetを使用してMsTest.TestAdapterモジュールへの参照を含める必要がありました。

MSTest.TestFrameworkとMicrosoft.Net.Test.Sdkを使用した新しいプロジェクトでは、単一の単体テストを実行するのに十分ではありませんでした。

私の場合、.NETCoreではなく.NETFramework4.8を対象としたテストプロジェクトを使用していたことに気づきました。ただし、この修正はそのプラットフォームにも適用される可能性があると強く信じています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.