Testhost.dll konnte nicht gefunden werden. Bitte veröffentlichen Sie Ihr Testprojekt und versuchen Sie es erneut

99

Ich habe eine einfache Dotnet-Kernklassenbibliothek mit einer einzigen XUnit-Testmethode:

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);
        }
    }
}

Wenn ich das Projekt über die CLI eingebe und dotnet builddie Projekterstellung eingebe. Wenn ich tippe, dotnet testbekomme ich folgendes:

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.

Was muss ich ändern, damit der Test ausgeführt wird?

Wenn dies hilft, zeigt VS Code die Tests auch nicht in seinem Test-Explorer an.

Matt W.
quelle
In meinem Fall konnten Sie keine Tests für netstandard2.0 ausführen, da dies eine API-Definition und keine Laufzeit ist. Wenn Sie das TFM auf net472 umstellen, funktionieren die Dinge einwandfrei. Alternativ können Sie beispielsweise mehrere Ziele für netcore + net472 festlegen und gegen beide ausführen.
20.

Antworten:

25

In meinem Fall bestand das Problem darin, dass ich auf .NET Core 2.0 abzielte und das Wechseln zu .NET Core 2.1 das Problem löste. Ich habe jedoch Microsoft.NET.Test.SDK v16.4.0 anstelle von 15.9.0 verwendet.

Andreas
quelle
153

Das Installieren des Microsoft.NET.Test.SdkPakets vom Nuget Package Manager hat mein Problem behoben.

R15
quelle
Das war bereits in meinem Beitrag enthalten - aber Sie haben Recht: Es wird große Probleme geben, Unit-Tests mit Dotnet Core ohne diesen auszuführen.
Matt W
2
"Microsoft.NET.Test.Sdk" war das fehlende Teil, wenn Sie ein Klassenbibliotheksprojekt hinzufügen und daraus ein Testprojekt machen. Wahrscheinlich ist es das Beste, ein neues Testprojekt hinzuzufügen und dann die benötigten Nuget-Pakete wie Rhino oder Moq usw. hinzuzufügen.
Yawar Murtaza
2
Erstellt .NET Standard 2.0 lib, hinzugefügt xunit, xunit.runner.visualstudiound Microsoft.NET.Test.Sdkzum Projekt immer noch das gleiche Ergebnis. Ich denke, es gibt noch einen weiteren Faktor im Spiel ...
Manfred
12
Das Problem in meinem Fall wurde durch das Erstellen eines netstandard2.0Projekts anstelle eines netcoreapp2.2Projekts verursacht. Sobald ich zu letzterem wechselte, funktionierte es. Die einzigen nuget Pakete ich brauchte waren xunit, xunit.runner.visualstudiound Microsoft.NET.Test.Sdk.
Manfred
1
Die Installation von Microsoft.NET.Test.Sdk funktionierte auch bei mir nicht, BIS ich es tat dotnet clean
IGx89
24

Ich hatte eine Klassenbibliothek erstellt und versucht, das XUnit NuGet-Paket darin zu verwenden.

Was ich hätte tun sollen, war ein XUnit-Projekt mit diesem Befehl zu erstellen: dotnet new xunit -n TestProject

Ich habe diese hilfreiche Seite gefunden .

Matt W.
quelle
3
Nach dem Ausführen dieses Befehls möchten Sie möglicherweise die Nuget-Pakete mit den neuen Projektreferenzen aktualisieren.
Manfred
Oder installieren Sie nuget xunit.runner.visualstudion für ein bestehendes Projekt;)
Lukáš Kmoch
Ist das ein Tippfehler? Ich kann das nicht finden.
Matt W
Wenn Sie ein vorhandenes Projekt haben, können Sie den Namen dieses Projekts übergeben, um --forcezu erzwingen, dass das Projekt als xUnit-Testprojekt neu erstellt wird. Gemäß dem Kommentar von @ Manfred müssen Sie alle Projektreferenzen, die Sie in diesem Projekt hatten, aktualisieren / erneut hinzufügen.
Myles
1
@MattW Ja, das sieht nach einem Tippfehler aus. Ich denke, @Lukas meinte, xunit.runner.visualstudiowas Sie unter nuget.org/packages/xunit.runner.visualstudio
Manfred
12

In meinem Fall war das Problem, dass ich ein Erweiterungsprojekt für xunit habe. Es gibt auch ein Testprojekt zum Testen der Erweiterungen. Als ich dotnet testmeine Lösung ausführte, wurde mein Erweiterungsprojekt auch als Unit-Test-Projekt aufgenommen (es dauerte einige Zeit, bis ich dies realisierte). Der Grund dafür ist, dass es auf einige xunit-Pakete verweist. Eines dieser xunit-Pakete legt die <IsTestProject>true</IsTestProject>Eigenschaft in Ihrer csprj-Datei automatisch fest. Dies ist eigentlich eine gute Sache, da 99,99% der Projekte, die auf xunit verweisen, tatsächlich Unit-Tests sind. Ich könnte dies endlich lösen, indem ich es explizit einstelle

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

Manuell in meiner csproj-Datei. Dann ging das Problem weg.

Willy Van den Driessche
quelle
11

Dies geschah mir nach dem Update von Microsoft.NET.Test.Sdk von v16.2.0 auf v16.4.0 mit <TargetFramework>netcoreapp2.0</TargetFramework>. Aktualisierung, <TargetFramework>netcoreapp3.0</TargetFramework>um das Problem für mich zu beheben.

Steve Hansen
quelle
9

Es wurde durch Installation behoben xunit.runner.visualstudio.

Eugene Ihnatsyeu
quelle
8

Wenn Sie xUnit verwenden, stellen Sie sicher, dass Ihr Projekttyp nicht so netstanderd ist. Da xUnit netstanderd nicht unterstützt , ändern Sie es in coreapp2.0 oder andere.

Raj Kumar
quelle
Dies war insbesondere mein Problem. Doh! Ich hätte das früher fangen sollen. Vielen Dank für Ihre Antwort, die mich auf den richtigen Weg gebracht hat :)
Dev Leader
Durch Ändern des Testprojekts in eine .Net Core-App konnte das Paket xunit.runner.visualstudio ordnungsgemäß installiert werden. Bitte beachten Sie, dass Sie Ihre Lösung wahrscheinlich schließen und neu laden müssen, damit VisualStudio die Änderungen sortieren kann.
Sheldon,
8

Ich bin dem schon ein paar Mal begegnet und vergesse immer, was los ist. Zuletzt hatte ich:

  • Klassenbibliothek -> Targeting von .NET Core 3.0
  • Testprojekt -> Targeting von .NET Core 3.1

Pakete für mein Testprojekt:

  • Moq -> 4.14.1
  • xUnit -> 2.4.1
  • xUnit.Runner.VisualStudio -> 2.4.2

Ich habe gesehen:

C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll konnte nicht gefunden werden. Bitte veröffentlichen Sie Ihr Testprojekt und versuchen Sie es erneut.

Und alles, was ich tun musste, war meinem Testprojekt das fehlende Nuget-Paket hinzuzufügen: "Microsoft.NET.Test.SDK"

Zu diesem Zeitpunkt war alles wieder normal.

Dev Leader
quelle
6

Ich habe ein sehr interessantes Kompatibilitätsproblem mit einer Version gefunden. Ich habe mein Code wie gewohnt aktualisiert und zu xUnit.runner.visualstudio 2.4.2 gewechselt. Es funktionierte nicht mehr für .Net Core 3.1. Ich musste auf 2.4.1 downgraden und es fing wieder an zu funktionieren.

Maximiliano Rios
quelle
1
Ich hatte das gleiche Problem - für einige der Testprojekte in meiner Lösung. Der häufigste Faktor für die nach dem Update auf 2.4.2 fehlgeschlagenen Testprojekte war, dass in diesen Projekten Microsoft.Net.Test.Sdk fehlte (war noch nie ein Problem). Das 16.6.1-Nuget wurde hinzugefügt und es wurde wieder funktioniert.
bit0001
Schön, das wusste ich nicht. Ich habe ein Downgrade durchgeführt, damit es funktioniert
Maximiliano Rios
1
Ich habe es auf die gleiche Weise behoben. Das Downgrade des xUnit.runner.visualstudio-Pakets auf 2.4.1 löste das Problem.
Jacek Labuda
Ich kann bestätigen, dass es sich immer noch um ein Problem mit Version 2.4.3 von xunit.runner.visualstudio handelt. Ein Downgrade auf 2.4.1 löst das Problem.
bN_
Aus diesem Grund musste ich viele Projekte herabstufen. Ich habe versehentlich alles aktualisiert und es hat aufgehört zu funktionieren
Maximiliano Rios
5

Ich habe ein netcoreapp2.2-Testprojekt erstellt und dann versucht, es dotnet vstestaus dem bin-Ordner auszuführen . Ich habe festgestellt, dass die Microsoft Test DLLs von:

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

wurden nicht in meinen bin-Ordner ausgegeben. Anstatt nur zu erstellen, habe ich stattdessen eine Veröffentlichung ausgeführt, die die erforderlichen DLLs im Ausgabeordner enthielt, und konnte dann dotnet vstestvon dort aus ausführen .

Michael Armitage
quelle
3

Wenn Sie auf netstandard2.0 abzielen, funktioniert dies nicht. Wenn Sie .NET Core verwenden. Stellen Sie sicher, dass die .csproj die folgenden Zeilen enthält:

<TargetFramework>netcoreapp3.0</TargetFramework>

und enthält auch das Paket Microsoft.NET.Test.Sdk

HarryKak
quelle
2

Das gleiche Problem, mit dem ich beim Nunit-Projekt (.net Core 3.1) konfrontiert war. Ich habe Microsoft.NET.Test.SDK v16.6.1 verwendet und die Version auf 15.9.0 heruntergestuft. Und es fängt an zu arbeiten

SaifAli Sanadi
quelle
1

Bei diesem Fehler war die Hauptursache, dass die Tests die maximale Länge für einen Windows-Pfad (MAX_PATH) erreichten, der als 260 Zeichen definiert ist.

S1r-Lanzelot
quelle
0

Wenn Sie ein Projekt durch Klonen ausführen, müssen Sie als Lösung Microsoft.NET.Test.Sdk installieren. Gewusst wie: Tools> Nuget Package Manager> Verwalten von Nuget Packages For Solution ...> Suchen Sie nach Microsoft.NET.Test.Sdk und installieren Sie es für Ihr Testprojekt.

Shawon Barua
quelle
0

Dies kann auch durch den versehentlichen Versuch verursacht werden, ein Nicht-Test-Projekt auszuführen. Dies geschieht normalerweise, wenn der Filter für Testdateien zu groß ist.

reim
quelle
0

Beim Versuch, einen Komponententest zu debuggen, ist dieser Fehler aufgetreten. Unten sind die Schritte, die ich versucht habe.

  • Schritt 1: Installierte Microsof.TestPlatform.TestHost und versuchte den Test auszuführen, aber kein Glück.
  • Schritt 2: Das Zielframework wurde von .NET Core 2.0 auf 2.1 geändert und versucht, den Test auszuführen, aber kein Glück.
  • Schritt 3: VS2017 geschlossen und geöffnet und versucht zu laufen.

Yay!!! es hat funktioniert :-) Verpasse nie den letzten Schritt ;-) Hoffe das hilft jemandem wie mir.

Venu
quelle