繁体   English   中英

在 Visual Studio Code 中找不到 Xunit 命名空间

[英]Xunit Namespace Could not be Found in Visual Studio Code

我正在为 .NET Core 项目使用 Visual Studio Code。 我有一个 ASP.NET Core 项目,我想为其创建一个单独的单元测试项目,我创建了一个子文件夹并运行

dotnet new xunit
dotnet restore

当我尝试从 cli“dotnet build”“dotnet run”运行它时,它成功运行,但是在 visual studio 中,它说找不到名称空间 Xunit

在此处输入图像描述 在此处输入图像描述

这很奇怪,因为到目前为止,Visual Studio 代码对我来说工作得很好,它从来没有遇到过依赖问题,只有 Xunit 有这个问题。

有人熟悉这个问题吗?

我遇到过同样的问题。 通过在命令面板中键入“Restart Omnisharp”解决了这个问题。

将 xunit 引用添加到根 csproj 可能是不可取的。

问题

在单独的 csproj 中进行测试的想法是,它们及其依赖项不会包含在主项目中。 然而,将 xunit 添加到根 csproj 将导致主项目引用 xunit。 根据产品的捆绑方式,这将导致不必要地包含 xunit dll 及其依赖的所有 dll。

不幸的是,Omnisharp 存在嵌套 csproj 问题。 看起来根 csproj 将声明所有子目录中的所有源文件,即使有嵌套的 csproj。 这会导致缺少引用错误。

解决方案

不要嵌套 csproj。 请注意Microsoft 的 xunit 安装指南如何将主 csproj 及其测试 csproj 放入 sln 的不同子目录中。

我也第一次遇到这个错误,在将项目重组为不嵌套 csproj 后,错误得到解决; 只有测试 csproj 引用 xunit。

我尝试直接用 vscode 打开测试项目(而不是打开子文件夹中包含测试项目的根项目),现在 vscode 识别 Xunit。

然后我再次用 vscode 打开根项目,将 Xunit 添加到根项目的 csproj 文件中,在根项目中运行“dotnet restore”,现在 Xunit 在测试项目中被识别了。

问题是 vscode(或者它是 Omnisharp?我不确定)可能只查看根 csproj 文件并忽略恰好位于子文件夹中的任何 csproj 文件。

序幕

以上都不适合我。

原来我应该检查一下我之前的笔记,因为这是一个使用 Xunit 的项目反复出现的问题:

确保所有已安装的 Xunit.xxxxxxxxx 包具有完全相同的版本。

自动更新我的 NuGet 包时/之后会出现问题,在撰写本文时,它将安装 Xunit 2.4.1 (以及2.4.1版的其他几个 xunit 包)以及2.4.3版的xunit.runner.visualstudio (!)

虽然在此 NuGet 更新期间没有报告任何异常情况,但结果是构建永久失败,其中FactAssert突然变得未知,例如

错误 CS0246:找不到类型或命名空间名称“Fact”(是否缺少 using 指令或程序集引用?)Imazen.Test.Webp

修复

对我有用的是去恢复xunit.runner.visualstudio更新,重新安装 2.4.1。

顺便说一句,在 Visual Studio 中,这看起来像这样(在还原/重新安装之后):

在此处输入图像描述

请注意,那里的包管理器暗示更新可用,并且一旦您再次应用该 2.4.3 更新,无论如何,您都会回到原点:一个奇怪的失败构建。

解决方案的关键是让所有已安装的 xunit 包具有相同的版本。 -- 如果 NuGet 上只有少数更新可用,请等待所有 xunit 包都可用于同一版本。

后记

不知道为什么这如此挑剔,因为我只观察到xunit.*的这种脆弱行为,但这是今年早些时候的工作(我忘记了)现在又发生在我身上,结果相同:强制恢复 NuGet xunit 包更新。

@areller 的解决方案解决了我的问题。 我只是想扩展他的回答以提供一些示例代码,以防其他人不知道该怎么做(尤其是如果您像我一样刚开始使用 C#)。

问题

首先,我按照此处的说明开始为 .NET Core 应用程序编写单元测试: https ://learn.microsoft.com/en-gb/dotnet/core/testing/unit-testing-with-dotnet-test

然后我遇到了OP提到的同样问题。

解决方案

首先,我通过重新启动 OmniSharp 尝试了 Claus 的解决方案,但它并没有解决问题。

然后,按照@areller 的建议,我在Tests.csproj中找到了这些行:

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
    <PackageReference Include="xunit" Version="2.3.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
    <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
  </ItemGroup>

我复制了它,并粘贴到我的根目录的.csproj文件中,所以根.csproj看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
    <PackageReference Include="xunit" Version="2.3.1" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
    <DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
  </ItemGroup>
</Project>

之后,VS Code 要求我恢复。 VS Code 对话框带有一个“恢复”按钮; 我点击了那个; 几秒钟后问题消失了。

祝你好运!

我遇到过同样的问题。 我为我的 .Net 5 解决方案安装了 xunit.extensibility.core (2.4.1),它解决了这个问题。 xunit.runner.visualstudio (2.4.3) 已经存在。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM