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

22
我正在使用Visual Studio Code进行.NET Core项目开发。 我有一个ASP.NET Core项目,想要创建一个单独的单元测试项目,我创建了一个子文件夹并运行。
dotnet new xunit
dotnet restore

当我尝试通过命令行运行 "dotnet build" 和 "dotnet run" 时,它成功运行了。然而在 Visual Studio 中,它说找不到 Xunit 命名空间。

enter image description here enter image description here

这很奇怪,因为Visual Studio Code到目前为止一直工作得很好,它从来没有依赖问题,只有在使用Xunit时才出现了这个问题。
有人熟悉这个问题吗?
7个回答

31

我遇到了同样的问题,通过在命令面板中输入“重新启动Omnisharp”解决了它。


3
它只能暂时解决这个问题。 - VsMaX
3
经过这么多年,重新启动OmniSharp仍然是一个问题,真烦人。 - u84six

19
将xunit引用添加到根csproj可能是不可取的。
问题
将测试放在单独的csproj中的想法是,它们及其依赖关系不会包含在主项目中。但是,将xunit添加到根csproj将导致主项目引用xunit。根据产品的捆绑方式,这将导致不必要地包含xunit dll及其所依赖的所有dll。
不幸的是,Omnisharp存在嵌套csproj的问题。似乎根csproj将声明所有子目录中的所有源文件,即使有嵌套的csproj也是如此。这会导致缺少引用错误。
解决方案
不要嵌套csproj。请注意Microsoft的xunit设置指南将主csproj及其测试csproj放入sln的不同子目录中。
我也遇到了这个错误,并且在重构项目以不嵌套csproj后,该错误得到了解决;只有测试csproj引用了xunit。

旧的csproject文件需要您在构建过程中明确包含哪些文件夹。核心文件会自动包含这些文件夹,除非您将它们排除在外。 - code4j
这对我有用,一旦我将主项目和测试项目目录放在同一个解决方案下的相同级别,我就能成功构建。谢谢! - Nick Wright
是的,这对我有用。我正在处理一个现有项目,并需要添加集成测试。创建了Test文件夹和项目后,发现XUnit引用不正确。将我的sln文件移动到父目录,添加测试sln,进行引用,dotnet restore一切正常。按照OP提供的Microsoft xunit设置指南进行操作。 - adR

17

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

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

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


6

前言

以上所有方法都对我无效。

结果我应该检查之前的笔记,因为这是一个使用Xunit的项目中经常出现的问题:

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

问题发生在自动更新NuGet包后,此时会安装Xunit 2.4.1(以及其他几个版本为2.4.1的xUnit包)版本为2.4.3xunit.runner.visualstudio(!)

虽然此NuGet更新期间没有报告任何不良反应,但结果是永久性的构建失败,在其中FactAssert突然变成未知的,如下所示:

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

解决方法

对我有效的方法是回到那个xunit.runner.visualstudio更新之前并将其还原为2.4.1版本。

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

enter image description here

请注意,包管理器提示可用更新,并且只要再次应用该2.4.3更新,您就回到了原点:一个奇怪的构建失败。

解决方案的关键是所有已安装的xunit包版本都必须相同。 -- 如果只有几个在NuGet上有更新可用,请等待所有xunit包都出现同一版本的更新

附言

不知道为什么这么讨厌,因为我只观察到与xunit.*相关的脆弱行为,但这是今年早些时候有效的(我已经忘记了),现在又发生了同样的问题:NuGet xunit包更新必须还原。


1

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

问题

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

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

解决方案

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

然后,按照@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 对话框上有一个“恢复”按钮;我点击了它,几秒钟后问题就解决了。
祝好运!

是但不是,为什么?请阅读@Adrian的回答...这就是问题所在:“将Xunit添加到根项目的csproj文件中”- 我们不希望在根csproj中引用xunit,这就是整个问题的关键... - solujic
1
2021年了,我仍然在通过CLI向dotnet core 5项目添加单元测试时遇到同样的问题...这个问题真的还没有解决吗? - Anonymous

0

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


0

我也遇到了同样的问题,但是我的情况很简单,只是因为没有安装xunit

dotnet add package xunit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接