【问题标题】:Visual Studio unable to run .NET Core testsVisual Studio 无法运行 .NET Core 测试
【发布时间】:2019-12-17 06:55:40
【问题描述】:

使用最新版本的 Visual Studio,我无法在测试资源管理器中运行任何测试。 Tests 输出窗口中的错误信息是:

Testhost process exited with error: It was not possible to find any compatible framework version
The framework 'Microsoft.AspNetCore.App', version '2.2.0' was not found.
  - The following frameworks were found:
      3.1.0 at [C:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App]
You can resolve the problem by installing the specified framework and/or SDK.
The specified framework can be found at:
  - https://aka.ms/dotnet-core-applaunch?framework=Microsoft.AspNetCore.App&framework_version=2.2.0&arch=x86&rid=win10-x86
. Please check the diagnostic logs for more information.
[17/12/2019 5:46:13.908 PM] ========== Run aborted: 0 tests run (0:00:00.2418036) ==========

所以建议我需要安装 .net core 2.2 但它找不到它。只能找到3.1。

让我们确认一下......

C:\Users\justi>dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   3.1.100
 Commit:    cd82f021f4

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18362
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.100\

Host (useful for support):
  Version: 3.1.0
  Commit:  65f04fb6db

.NET Core SDKs installed:
  2.1.604 [C:\Program Files\dotnet\sdk]
  2.1.700 [C:\Program Files\dotnet\sdk]
  2.1.701 [C:\Program Files\dotnet\sdk]
  2.1.801 [C:\Program Files\dotnet\sdk]
  2.1.802 [C:\Program Files\dotnet\sdk]
  2.2.100 [C:\Program Files\dotnet\sdk]
  2.2.200 [C:\Program Files\dotnet\sdk]
  2.2.201 [C:\Program Files\dotnet\sdk]
  2.2.202 [C:\Program Files\dotnet\sdk]
  2.2.204 [C:\Program Files\dotnet\sdk]
  2.2.206 [C:\Program Files\dotnet\sdk]
  2.2.300 [C:\Program Files\dotnet\sdk]
  2.2.301 [C:\Program Files\dotnet\sdk]
  2.2.401 [C:\Program Files\dotnet\sdk]
  2.2.402 [C:\Program Files\dotnet\sdk]
  3.1.100 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  <snip snip>
  Microsoft.AspNetCore.All 2.1.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.All 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  <snip snip>
  Microsoft.AspNetCore.App 2.1.14 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  <snip snip>
  Microsoft.AspNetCore.App 2.2.8 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.AspNetCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.9 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.1.1 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  <snip snip>
  Microsoft.NETCore.App 2.1.14 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.2 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  <snip snip>
  Microsoft.NETCore.App 2.2.8 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

所以它感觉就像我安装了 2.2.0,因为它列在安装的许多版本的列表中。

编辑

注意这一点(强调我的):

  • 找到了以下框架: 3.1.0 在 [C:\Program Files (x86)\dotnet\shared\Microsoft.AspNetCore.App]

看起来它已将 3.1.0 安装到 ..x86 中,而其余的 sdk 安装在 Program Files(x64 位版本)下。

为什么会这样说?

编辑 2:

  • xUnit
  • xUnit VS runner nuget 也已“安装”。
  • Visual Studio 16.4.1

【问题讨论】:

  • 我通过关闭并重新打开所有 VS 窗口解决了类似的问题。我有许多开放的解决方案,但不知道导致此问题的缓存内容。也许这有帮助
  • 有时 Visual Studio 中的测试问题可以通过更改为 x64 架构来解决。你能试试吗?测试->TestSettings->默认处理器架构
  • 如果您使用的是哪种测试?有很多框架。而如果不是MsTests,比如XUnit,就应该安装TestRunners。
  • @TemaTre 是的 - 你 sorta 明白了。它设置为 x86,当我将其切换到 x64 时……它起作用了。但为什么呢?
  • 我已经尝试打开另一个完全不同的解决方案 .. 它默认为 x86 但它正在工作并找到 x64 sdk,因为测试全部运行(勾选 x86)并且这也被记录到TESTS 输出窗口:xUnit.net VSTest Adapter v2.4.1 (64-bit .NET Core 4.6.28207.03) ...所以它就像是基于某些东西“自动检测”?

标签: c# visual-studio asp.net-core testing


【解决方案1】:

从 CPU x86 更改为 x64 … 测试 > anyCPU 项目的进程架构 > x64

【讨论】:

  • 是的 - 这让我的测试再次运行.. 但我试图弄清楚 如何为什么 这一切都开始了,首先地点。
  • 这为我解决了问题。我不知道为什么,但是当我重新安装或升级 Visual Studio 时,处理器体系结构设置必须已重置(我最近都做过)。
  • 在默认的 VS2019 配置中,此选项位于测试资源管理器中的齿轮图标下方。我试图编辑这个答案,但看起来它会被拒绝。
  • 我猜这里发生的事情是 VS 16.4 附带 .NET Core 3.1,对于某些人来说,这可能是第一个安装的 32 位 SDK。我怀疑即使检查了 x86(不确定这是否是默认设置),如果没有找到 32 位 SDK,它也可能与 64 位 SDK 一起运行。当 VS 升级时,该设置或该设置的默认值已更改为 x86。
  • 似乎在Microsoft.NET.Test.Sdk 的版本16.0.1 之后,它只在C:\Program Files x86\dotnet\shared 中查找共享包dotnetcoreapp,而不检查C:\Program Files\dotnet\shared
【解决方案2】:

当您升级测试项目但未升级测试 SDK 时,有时会发生这种情况。如果您升级 Visual Studio 但没有引用最新的测试 SDK,也会发生这种情况。

在您的测试项目的 .csprojfile 中,您应该可以找到类似以下内容的内容

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

在你的testproject.csproj

这些通常与 Visual Studio 版本同步,因此最新的 Visual Studio 是 16.4。尝试升级该引用以匹配您的 Visual Studio 版本,即

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

对于最新的稳定版本或

<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0-preview-20191115-01" />

最新预览版。

此错误的另一个来源可能是,您的项目是 .NET Core 3.x 项目,但您的单元测试项目仍然是 .NET Core 2.2。确保它们都使用相同版本的 .NET Core

<PropertyGroup>
  <TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>

【讨论】:

    【解决方案3】:

    命令dotnet rundotnet test...等他们都使用他们可以找到的最新的dotnet版本,这个版本可以通过dotnet --info进行验证,就像你已经完成的那样,在你的情况下最新安装的是3.1.0。如果你想运行不同版本的dotnet,你需要创建 global.json 文件,这里描述Select the .NET Core version to use

    来自链接资源

    当您运行 SDK 命令时,SDK 使用最新安装的版本。

    dotnet 以交互方式从当前工作目录向上搜索 global.json 文件

    dotnet使用在找到的第一个 global.json 中指定的 SDK

    只需在您的解决方案文件夹中创建 global.json 并定义所需的正确 sdk 版本

    【讨论】:

      【解决方案4】:

      我也有这个问题。测试输出中显示的错误。

      错误信息sn-p:

      测试数据存储在 0.153 秒内打开。 ---------- 为请求的测试运行启动测试发现 ---------- Microsoft.VisualStudio.TestPlatform.ObjectModel.TestPlatformException: Testhost 进程退出并出现错误:找不到任何 兼容的框架版本框架'Microsoft.NETCore.App', 找不到版本“2.1.0”。

      • 找到了以下框架: 3.1.9 在[C:\Program Files (x86)\dotnet\shared\Microsoft.NETCore.App] 可以解决问题 通过安装指定的框架和/或 SDK。指定的 可以在以下位置找到框架:
      • https://aka.ms/dotnet-core-applaunch?framework=Microsoft.NETCore.App&framework_version=2.1.0&arch=x86&rid=win81-x86 .请查看诊断日志以获取更多信息。在 Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyOperationManager.ThrowOnTestHostExited(布尔 testHostExited) 在 Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyOperationManager.SetupChannel(IEnumerable`1 来源,字符串运行设置)在 Microsoft.VisualStudio.TestPlatform.CrossPlatEngine.Client.ProxyDiscoveryManager.DiscoverTests(DiscoveryCriteria discoveryCriteria, ITestDiscoveryEventsHandler2 eventHandler) ========== 测试发现中止:在 1.4 秒内找到 0 个测试 ========== 执行文件中的所有测试:ConfigurationTests.cs ---------- 开始试运行 ---------- ========== 测试运行已完成:0 次测试在 123.4 毫秒内运行(0 次通过,0 次失败,0 次跳过)==========

      安装 .NET Core SDK 3.1.x 后出现此问题。此更改必须对 Visual Studio 测试设置产生影响。

      在 (x86) 上的安装:

      在 (x64) 上的安装:

      我在没有对解决方案或项目文件进行任何更改的情况下修复了它。在我的测试资源管理器中,我为 AnyCPU 项目选择了处理器架构。我把它从 x86 改成了 x64。

      注意:我所有的 .NET Core 安装都是 x64。但是,由于某种原因,x86 中只存在 3.1.x。我的测试项目的目标框架是 .NET Core 2.1,因此要运行测试,它需要查看 x64 文件夹路径。

      从添加或删除程序中的安装外观:

      【讨论】:

        【解决方案5】:

        Visual Studio 中的测试问题有时可以通过更改为 x64 架构来解决。你能试试吗?测试->TestSettings->默认处理器架构。

        还有一点是,默认加载不正确的DLL。所以,Visual Studio 是由我遇到这样的事情生成的:

        <Choose>
        <When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
          <ItemGroup>
            <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
          </ItemGroup>
        </When>
        <Otherwise>
          <ItemGroup>
            <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework">
              <Private>False</Private>
            </Reference>
          </ItemGroup>
        </Otherwise>
        </Choose>
        

        所以,问题出在否则。我将其替换为:

        <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
        

        一切正常。可能在你的项目中你有这样的东西。

        【讨论】:

        • 它是 *.csproj 文件
        • 对你有帮助吗?
        • 取代Microsoft.VisualStudio.QualityTools.UnitTestFrameworkv10 的问题一直存在。我同意这确实适用于 QualityTools,但它与使用 xUnit.net VSTest 适配器的 OP 冲突。
        【解决方案6】:

        将特定的 .NET 核心版本添加到构建管道解决了我的问题。 查找特定的 .NET core 版本Here

        【讨论】:

          猜你喜欢
          • 2021-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-17
          • 2021-10-09
          相关资源
          最近更新 更多