Testhost.dll खोजने में असमर्थ। कृपया अपनी परीक्षण परियोजना प्रकाशित करें और पुनः प्रयास करें


112

मेरे पास एक एकल XUnit परीक्षण विधि के साथ एक सरल डॉटनेट कोर क्लास लाइब्रेरी है:

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

यदि मैं सीएलआई पर परियोजना में प्रवेश करता हूं और परियोजना का निर्माण करता हूं 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.

परीक्षण चलाने के लिए मुझे क्या बदलने की आवश्यकता है?

यदि यह मदद करता है, तो वीएस कोड अपने परीक्षण एक्सप्लोरर में परीक्षणों को प्रदर्शित नहीं कर रहा है।


मेरे मामले में, यह था कि आप वास्तव में netstandard2.0 के खिलाफ परीक्षण नहीं चला सकते हैं, क्योंकि यह एपीआई परिभाषा है, न कि रनटाइम। यदि आप TFM को net472 पर स्विच करते हैं, तो चीजें ठीक काम करती हैं। वैकल्पिक रूप से, आप उदाहरण के लिए netcore + net472 को बहु-लक्ष्य कर सकते हैं और दोनों के खिलाफ चला सकते हैं।
kzu

जवाबों:


25

मेरे मामले में, समस्या यह थी कि मैं .NET कोर 2.0 को लक्षित कर रहा था और .NET कोर 2.1 पर स्विच करने से समस्या हल हो गई। हालाँकि मैं 15.9.0 के बजाय Microsoft.NET.Test.SDK v16.4.0 का उपयोग कर रहा था।


177

Microsoft.NET.Test.Sdkनौगेट पैकेज मैनेजर से पैकेज स्थापित करने से मेरी समस्या हल हो गई।


यह मेरी पोस्ट में पहले से ही शामिल था - लेकिन आप सही हैं: इसके बिना डॉटनेट कोर के साथ यूनिट परीक्षण चलाने में बड़ी समस्याएं होंगी।
मैट

2
"Microsoft.NET.Test.Sdk" एक अनुपलब्ध टुकड़ा था जब आप एक क्लास लाइब्रेरी प्रोजेक्ट जोड़ते हैं और एक परीक्षण प्रोजेक्ट में बदल जाते हैं। संभवत: सबसे अच्छी बात यह है कि एक नई परीक्षण परियोजना को जोड़ना होगा, फिर राइनो या Moq आदि जैसे आवश्यक नगेट पैकेजों को जोड़ना होगा ...
यवर मुर्तजा

3
बनाया .NET .NET 2.0 परिवाद, जोड़ा xunit, xunit.runner.visualstudioऔर Microsoft.NET.Test.Sdkपरियोजना के लिए, अभी भी एक ही परिणाम है। मुझे लगता है कि प्ले में एक और कारक है ...
मैनफ्रेड

12
मेरे मामले में समस्या एक netstandard2.0परियोजना के बजाय एक परियोजना बनाने के कारण हुई netcoreapp2.2। जैसे ही मैंने बाद में स्विच किया, इसने काम किया। केवल नौगेट पैकेज जो मुझे चाहिए थे xunit, xunit.runner.visualstudioऔर Microsoft.NET.Test.Sdk
मैनफ्रेड

1
Microsoft.NET.Test.Sdk को स्थापित करना मेरे लिए काम नहीं आया, UNTIL मैंने किया dotnet clean
IGx89

26

मैंने एक क्लास लाइब्रेरी बनाई थी और उसमें XUnit NuGet पैकेज का उपयोग करने की कोशिश की थी।

मुझे क्या करना चाहिए था इस आदेश का उपयोग कर एक XUnit प्रोजेक्ट बनाया गया था: dotnet new xunit -n TestProject

मुझे यह मददगार पेज मिला ।


3
इस आदेश को निष्पादित करने के बाद आप नए प्रोजेक्ट संदर्भों को नूगेट पैकेज अपडेट करना चाह सकते हैं।
मैनफ्रेड

या मौजूदा परियोजना के लिए nuget xunit.runner.visualstudion स्थापित करें;)
Lukáš Kmoch

क्या वह टाइपो है? मुझे वह नहीं मिल रहा है।
मैट डब्ल्यू

यदि आपके पास एक मौजूदा परियोजना है, तो आप उस के नाम को पारित कर सकते हैं ताकि --forceयह एक xUnit परीक्षण परियोजना के रूप में परियोजना के पुनर्निर्माण के लिए मजबूर कर सके। @ Manfred की टिप्पणी के अनुसार, आपको उस परियोजना में किसी भी परियोजना के संदर्भों को अपडेट / पुनः जोड़ना होगा।
मायल्स

1
@MattW हाँ, यह एक टाइपो की तरह दिखता है। मुझे लगता है कि @ लुकास का मतलब है xunit.runner.visualstudioजिसे आप nuget.org/packages/xunit.runner.visualstudio पर पा सकते हैं
Manfred

14

मेरे मामले में समस्या यह थी कि मेरे पास xunit के लिए एक विस्तार परियोजना है। एक्सटेंशन का परीक्षण करने के लिए एक परीक्षण परियोजना भी है। जब मैं dotnet testअपने समाधान पर भागा , तो मेरी विस्तार परियोजना को एक इकाई परीक्षण परियोजना के रूप में भी चुना गया (मुझे इसे महसूस करने में कुछ समय लगा)। इसका कारण यह है कि यह कुछ xunit संकुल को संदर्भित करता है। इन xunit पैकेजों में से एक स्वचालित रूप <IsTestProject>true</IsTestProject>से आप को csprj फ़ाइल में गुण सेट करता है। 99.99% परियोजनाओं के बाद से यह वास्तव में एक अच्छी बात है कि संदर्भ xunit वास्तव में इकाई परीक्षण हैं। मैं अंत में स्पष्ट रूप से सेटिंग करके इसे हल कर सकता हूं

     <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 या अन्य में बदलें।


यह विशेष रूप से मेरी समस्या थी। रवींद्र! मुझे वह जल्द पकड़ लेना चाहिए था। आपकी प्रतिक्रिया के लिए धन्यवाद क्योंकि इसने मुझे सही रास्ते पर डाल दिया :)
देव लीडर

एक .Net कोर ऐप होने के लिए परीक्षण परियोजना को बदलना xunit.runner.visualstudio पैकेज को सही तरीके से स्थापित करने की अनुमति देता है। कृपया ध्यान दें कि शायद आपको अपने समाधान को बंद करने और VisualStudio को परिवर्तनों को सुलझाने के लिए पुनः लोड करने की आवश्यकता होगी।
शेल्डन

9

मैंने कई बार इसका सामना किया है और मैं हमेशा भूल जाता हूं कि क्या हो रहा है। हाल ही में मेरे पास था:

  • क्लास लाइब्रेरी -> लक्ष्यीकरण .NET कोर 3.0
  • टेस्ट प्रोजेक्ट -> लक्ष्यीकरण .NET कोर 3.1

मेरे परीक्षण परियोजना के लिए पैकेज:

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

मैं देख रहा था:

C: \ PATH \ bin \ Debug \ netstandard2.0 \ testhost.dll खोजने में असमर्थ। कृपया अपनी परीक्षण परियोजना प्रकाशित करें और पुनः प्रयास करें।

और मुझे जो कुछ भी करने की ज़रूरत थी वह मेरे परीक्षण प्रोजेक्ट में गायब नगेट पैकेज में जोड़ा गया था: "Microsoft.NET.Test.SDK"

इस बिंदु पर सब कुछ सामान्य था।


8

मुझे एक संस्करण के साथ एक बहुत ही दिलचस्प संगतता मुद्दा मिला। मैंने एक सामान्य अभ्यास, अपने कोड के रूप में अपग्रेड किया, और मैंने xUnit.runner.visualstudio 2.4.2 पर स्विच किया। इसने .Net Core 3.1 के लिए काम करना बंद कर दिया। मुझे 2.4.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 नगेट जोड़ा और फिर से काम करने के लिए वापस आ गया।
बिट 0001

अच्छा, मुझे नहीं पता था। मैंने इसे काम करने के लिए डाउनग्रेड किया
मैक्सिमिलियानो रिओस

1
मैंने इसे उसी तरह से तय किया है। 2.4.1 में xUnit.runner.visualstudio पैकेज का डाउनग्रेड करना समस्या का समाधान था।
जसक लाबुद

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बिन फ़ोल्डर से चलाने की कोशिश कर रहा था । मैंने देखा कि Microsoft टेस्ट DLL से:

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

मेरे बिन फ़ोल्डर में आउटपुट नहीं हो रहे थे। केवल निर्माण के बजाय, मैंने एक प्रकाशन चलाया, जिसमें आउटपुट फ़ोल्डर में आवश्यक DLL शामिल थे और मैं तब चलाने में सक्षम थाdotnet vstest वहां से ।


3

यदि आप netstandard2.0 को लक्षित कर रहे हैं तो यह काम नहीं करेगा। यदि .NET कोर का उपयोग कर रहे हैं। सुनिश्चित करें कि .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

इस त्रुटि में भाग गया, मूल कारण यह था कि परीक्षण एक विंडोज पथ (MAX_PATH) के लिए अधिकतम लंबाई मार रहे थे, जिसे 260 वर्णों के रूप में परिभाषित किया गया है।


1

यदि आप xunit.runner.visualstudio2.4.1 से अधिक संस्करण में अपग्रेड करते हैं तो यह त्रुटि हो सकती है । 2.4.1 तक के संस्करणों में शामिल हैं और इसमें एक संदर्भ भी शामिल हैMicrosoft.NET.Test.Sdk बाद लेकिन बाद में आपको अपनी परियोजना में संदर्भ को शामिल करने की आवश्यकता नहीं है।

दिलचस्प बात यह है कि मैंने पाया कि NCrunch ने अभी भी बिना अतिरिक्त संदर्भ के मेरे परीक्षण चलाए, जबकि मैं उन्हें CLI के माध्यम से नहीं चला सकता था।


0

यदि आप Microsoft .NET.Test.Sdk को स्थापित करने के लिए समाधान से क्लोन करके एक परियोजना चला रहे हैं। कैसे करें: टूल> नगेट पैकेज मैनेजर> समाधान के लिए नगेट पैकेज प्रबंधित करें ...> Microsoft.NET.Test.Sdk के लिए खोजें और अपने परीक्षण प्रोजेक्ट के लिए इंस्टॉल करें।


0

यह अनजाने में एक गैर-परीक्षण परियोजना को चलाने की कोशिश करने के कारण भी हो सकता है, यह आमतौर पर तब होता है जब आपकी परीक्षण फ़ाइलें फ़िल्टर बहुत व्यापक होती हैं।


0

एक इकाई परीक्षण को डीबग करने का प्रयास करते समय यह त्रुटि हुई। नीचे दिए गए चरणों की मैंने कोशिश की है।

  • चरण 1: स्थापित Microsof.TestPlatform.TestHost और परीक्षण चलाने की कोशिश की, लेकिन भाग्य नहीं।
  • चरण 2: .NET कोर 2.0 से 2.1 तक लक्षित रूपरेखा बदल दी गई है और परीक्षण चलाने की कोशिश की गई है लेकिन कोई भाग्य नहीं।
  • चरण 3: बंद और VS2017 खोला और चलाने की कोशिश की।

वाह!!! यह काम किया :-) अंतिम चरण का प्रयास करने के लिए कभी भी याद मत करो ;-) उम्मीद है कि यह मेरे जैसे किसी की मदद करता है।


0

Microsoft.TestPlatform.TestHostपाने के लिए जोड़ना था testhost.dll। मैंने पाया कि इस उत्तर में https://github.com/dotnet/sdk/issues/7171#issuecomment-261616546


यह अच्छा है कि आप अन्य लोगों को श्रेय दे रहे हैं, लेकिन यहां स्टैकओवरफ्लो पर, हम पसंद करते हैं कि आप यहां पर्याप्त जानकारी भी शामिल करें। बस आपके द्वारा दिया गया वेब लिंक किसी दिन टूट / अमान्य हो जाता है।
tgolisch

ठीक है, मैंने लिंक पर दोबारा गौर किया, मेरे जवाब में जोड़ने के लिए कोई जानकारी नहीं है। क्या मुझे इसे हटा देना चाहिए?
13कवव

1
दरअसल, आपका जवाब मददगार लगता है। मैं सुझाव नहीं दे रहा हूं कि आप इसे हटा दें। सामुदायिक मानकों का सुझाव है कि आपके उत्तर में लिंक के बजाय जानकारी होती है (paraphrase लेकिन नहीं साहित्यिक चोरी), इसलिए जानकारी S / O पर है, बिना क्लिक-थ्रू के।
tgolisch

0

मेरे मामले में, nuget का उपयोग करके MsTest.TestAdapter मॉड्यूल के संदर्भ को शामिल करना आवश्यक था।

MSTest.TestFramework और Microsoft.Net.Test.Sdk के साथ एक ताजा परियोजना एक एकल इकाई परीक्षण चलाने के लिए पर्याप्त नहीं थी।

मेरे मामले में नोटिफ़िकेशन मैं .NET फ्रेमवर्क 4.8 और न ही .NET कोर को टारगेट करते हुए एक टेस्ट प्रोजेक्ट का उपयोग कर रहा था। हालाँकि, मुझे पूरा विश्वास है कि यह सुधार उस प्लेटफॉर्म पर भी लागू हो सकता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.