Không thể tìm thấy testhost.dll. Vui lòng xuất bản dự án thử nghiệm của bạn và thử lại


100

Tôi có một thư viện lớp lõi dotnet đơn giản với một phương pháp kiểm tra XUnit duy nhất:

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

Nếu tôi nhập dự án trên CLI và nhập dotnet buildcác bản dựng dự án. Nếu tôi nhập, dotnet testtôi nhận được điều này:

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.

Tôi cần thay đổi những gì để chạy thử nghiệm?

Nếu hữu ích, VS Code cũng không hiển thị các bài kiểm tra trong trình khám phá thử nghiệm của nó.


Trong trường hợp của tôi, đó là bạn không thể thực sự chạy các thử nghiệm đối với netstandard2.0, vì đó là định nghĩa API, không phải thời gian chạy. Nếu bạn chuyển TFM sang net472, mọi thứ vẫn hoạt động tốt. Ngoài ra, bạn có thể đa mục tiêu thành netcore + net472 chẳng hạn và chạy với cả hai.
kzu

Câu trả lời:


25

Trong trường hợp của tôi, vấn đề là tôi đang nhắm mục tiêu .NET Core 2.0 và chuyển sang .NET Core 2.1 đã giải quyết được vấn đề. Tuy nhiên, tôi đang sử dụng Microsoft.NET.Test.SDK v16.4.0 thay vì 15.9.0.


154

Cài đặt Microsoft.NET.Test.Sdkgói từ trình quản lý gói nuget đã giải quyết được vấn đề của tôi.


Điều đó đã được đưa vào bài đăng của tôi - nhưng bạn nói đúng: sẽ có vấn đề lớn khi chạy các bài kiểm tra đơn vị với lõi dotnet mà không có nó.
Matt W

2
"Microsoft.NET.Test.Sdk" là phần còn thiếu khi bạn thêm một dự án thư viện lớp và biến nó thành một dự án thử nghiệm. Có lẽ là điều tốt nhất để làm sẽ có thêm một dự án thử nghiệm mới sau đó thêm gói NuGet cần thiết như Rhino hoặc Moq vv ...
Yawar Murtaza

2
Tạo NET Chuẩn 2.0 lib, bổ sung xunit, xunit.runner.visualstudioMicrosoft.NET.Test.Sdkcho dự án, vẫn cùng một kết quả. Tôi nghĩ rằng có một yếu tố khác đang diễn ra ...
Manfred

12
Vấn đề trong trường hợp của tôi là do tạo một netstandard2.0dự án thay vì một netcoreapp2.2dự án. Ngay sau khi tôi chuyển sang cái sau, nó đã hoạt động. Các gói nuget duy nhất tôi cần là xunit, xunit.runner.visualstudioMicrosoft.NET.Test.Sdk.
Manfred

1
Cài đặt Microsoft.NET.Test.Sdk không làm việc cho tôi, hoặc, cho đến khi tôi đã làm dotnet clean
IGx89

24

Tôi đã tạo một thư viện lớp và cố gắng sử dụng gói XUnit NuGet trong đó.

Những gì tôi nên làm là tạo một dự án XUnit bằng lệnh này: dotnet new xunit -n TestProject

Tôi tìm thấy trang này hữu ích .


3
Sau khi thực hiện lệnh này, bạn có thể muốn cập nhật các gói nuget tham chiếu dự án mới.
Manfred

Hoặc cài đặt nuget xunit.runner.visualstudion vào dự án hiện có;)
Lukáš Kmoch

Đó có phải là lỗi đánh máy không? Tôi không thể tìm thấy cái đó.
Matt W

Nếu bạn có một dự án hiện có, bạn có thể chuyển tên của dự án đó với --forceđể buộc nó xây dựng lại dự án dưới dạng một dự án thử nghiệm xUnit. Theo nhận xét của @ Manfred, bạn sẽ cần cập nhật / thêm lại bất kỳ tài liệu tham khảo dự án nào mà bạn có trong dự án đó.
Myles

1
@MattW Có, điều đó giống như lỗi đánh máy. Tôi nghĩ @Lukas có nghĩa là xunit.runner.visualstudiobạn có thể tìm thấy tại nuget.org/packages/xunit.runner.visualstudio
Manfred

12

Trong trường hợp của tôi, vấn đề là tôi có một dự án mở rộng cho xunit. Ngoài ra còn có một dự án thử nghiệm để kiểm tra các phần mở rộng. Khi tôi chạy dotnet testtrên giải pháp của mình, dự án mở rộng của tôi cũng được chọn là một dự án thử nghiệm đơn vị (tôi đã mất một thời gian để nhận ra điều này). Lý do cho điều này là nó tham chiếu đến một số gói xunit. Một trong những gói xunit này tự động đặt thuộc <IsTestProject>true</IsTestProject>tính trong tệp csprj của bạn. Đây thực sự là một điều tốt vì 99,99% các dự án tham chiếu xunit thực sự là các bài kiểm tra đơn vị. Cuối cùng tôi có thể giải quyết vấn đề này bằng cách thiết lập rõ ràng

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

Thủ công trong tệp csproj của tôi. Sau đó vấn đề biến mất.


11

Điều này đã xảy ra với tôi sau khi cập nhật Microsoft.NET.Test.Sdk từ v16.2.0 lên v16.4.0 với <TargetFramework>netcoreapp2.0</TargetFramework>. Đang cập nhật để <TargetFramework>netcoreapp3.0</TargetFramework>giải quyết vấn đề cho tôi.



9

Nếu bạn đang sử dụng xUnit, hãy đảm bảo rằng loại dự án của bạn không phải là netstanderd. Vì xUnit không hỗ trợ netstanderd , hãy thay đổi nó thành coreapp2.0 hoặc các loại khác.


Đây là vấn đề của tôi nói riêng. Doh! Tôi nên nắm bắt điều đó sớm hơn. Cảm ơn phản hồi của bạn vì nó đã đưa tôi đi đúng đường :)
Dev Leader

Thay đổi dự án thử nghiệm thành ứng dụng .Net Core cho phép gói xunit.runner.visualstudio cài đặt chính xác. Xin lưu ý rằng bạn có thể cần phải đóng giải pháp của mình và tải lại nó để VisualStudio sắp xếp các thay đổi.
Sheldon

8

Tôi đã gặp phải điều này một vài lần và tôi luôn quên chuyện gì đang xảy ra. Gần đây nhất tôi có:

  • Thư viện lớp -> Nhắm mục tiêu .NET Core 3.0
  • Dự án thử nghiệm -> Nhắm mục tiêu .NET Core 3.1

Các gói cho dự án thử nghiệm của tôi:

  • Moq -> 4,14,1
  • xUnit -> 2.4.1
  • xUnit.Runner.VisualStudio -> 2.4.2

Tôi đã thấy:

Không thể tìm thấy C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll. Vui lòng xuất bản dự án thử nghiệm của bạn và thử lại.

Và tất cả những gì tôi cần làm là thêm vào dự án thử nghiệm của mình gói nuget bị thiếu: "Microsoft.NET.Test.SDK"

Mọi thứ đã trở lại bình thường vào thời điểm này.


6

Tôi đã tìm thấy một vấn đề tương thích rất thú vị với một phiên bản. Tôi đã nâng cấp chỉ như một hoạt động bình thường, mã của tôi và tôi chuyển sang xUnit.runner.visualstudio 2.4.2. Nó đã ngừng hoạt động đối với .Net Core 3.1. Tôi đã phải hạ cấp xuống 2.4.1 và nó bắt đầu hoạt động trở lại.


1
Tôi đã gặp vấn đề tương tự - đối với một số dự án thử nghiệm trong giải pháp của tôi. Yếu tố phổ biến khiến các dự án thử nghiệm không thành công sau khi cập nhật lên 2.4.2 là các dự án đó bị thiếu Microsoft.Net.Test.Sdk (chưa từng là vấn đề trước đây). Đã thêm mã số 16.6.1 và hoạt động trở lại.
bit0001

Tốt, tôi không biết điều đó. Tôi đã hạ cấp để làm cho nó hoạt động
Maximiliano Rios

1
Tôi đã sửa nó theo cách tương tự. Hạ cấp gói xUnit.runner.visualstudio xuống 2.4.1 đã giải quyết được vấn đề.
Jacek Labuda

Tôi có thể xác nhận rằng đó vẫn là sự cố với phiên bản 2.4.3 của xunit.runner.visualstudio. Hạ cấp xuống 2.4.1 sẽ giải quyết được vấn đề.
bN_

Tôi đã phải hạ cấp rất nhiều dự án vì điều này. Tôi đã vô tình nâng cấp mọi thứ và nó ngừng hoạt động
Maximiliano Rios

5

Tôi đang xây dựng một dự án thử nghiệm netcoreapp2.2 và sau đó cố gắng chạy dotnet vstesttừ thư mục bin. Tôi nhận thấy rằng các tệp DLL thử nghiệm của Microsoft từ:

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

không được xuất vào thư mục bin của tôi. Thay vì chỉ xây dựng, tôi đã chạy một bản xuất bản thay vào đó bao gồm các tệp DLL cần thiết trong thư mục đầu ra và sau đó tôi có thể chạy dotnet vstesttừ đó.


3

Nếu bạn đang nhắm mục tiêu netstandard2.0, điều này sẽ không hoạt động. Nếu đang sử dụng .NET Core. đảm bảo .csproj chứa các dòng sau:

<TargetFramework>netcoreapp3.0</TargetFramework>

và cũng chứa gói Microsoft.NET.Test.Sdk


2

cùng một vấn đề mà tôi gặp phải đối với dự án Nunit (.net core 3.1). Tôi đang sử dụng Microsoft.NET.Test.SDK v16.6.1, tôi đã hạ cấp phiên bản xuống 15.9.0. Và nó bắt đầu hoạt động


1

Lỗi này xảy ra, nguyên nhân gốc rễ là các bài kiểm tra đã đạt đến độ dài tối đa cho đường dẫn Windows (MAX_PATH), được định nghĩa là 260 ký tự.


0

Nếu bạn đang chạy một dự án bằng cách nhân bản thì Giải pháp là cài đặt Microsoft.NET.Test.Sdk. Cách thực hiện: Tools> Nuget Package Manager> Manage Nuget Packages For Solution ...> Tìm kiếm Microsoft.NET.Test.Sdk và cài đặt cho dự án thử nghiệm của bạn.


0

Điều này cũng có thể do vô tình cố gắng chạy một dự án không phải thử nghiệm, điều này thường xảy ra khi bộ lọc tệp thử nghiệm của bạn quá rộng.


0

Gặp lỗi này khi cố gắng gỡ lỗi kiểm tra đơn vị. Dưới đây là các bước tôi đã thử.

  • Bước 1: Đã cài đặt Microsof.TestPlatform.TestHost và chạy thử nhưng không may.
  • Bước 2: Đã thay đổi khung Target từ .NET Core 2.0 thành 2.1 và cố gắng chạy thử nghiệm nhưng không thành công.
  • Bước 3: Đóng và mở VS2017 và thử chạy.

Yay !!! nó đã hoạt động :-) Không bao giờ bỏ lỡ để thử bước cuối cùng ;-) Hy vọng điều này sẽ giúp một người như tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.