在 Visual Studio 代码中找不到 Xunit 命名空间
Xunit Namespace Could not be Found in Visual Studio Code
我正在为 .NET Core 项目使用 Visual Studio 代码。
我有一个 ASP.NET 核心项目,我想为其创建一个单独的单元测试项目,我创建了一个子文件夹和 运行
dotnet new xunit
dotnet restore
当我尝试从 cli 运行 "dotnet build" "dotnet run" 它 运行 成功时,但是在 visual studio 中,它说它不能' t 找到命名空间 Xunit
这非常难运行ge 因为Visual Studio 代码到目前为止对我来说工作得很好,它从来没有依赖性问题,只有 Xunit 有这个问题。
有人熟悉这个问题吗?
我尝试使用 vscode 直接打开测试项目(而不是打开子文件夹中包含测试项目的根项目),现在 vscode 识别 Xunit。
然后我再次用 vscode 打开根项目,将 Xunit 添加到根项目的 csproj 文件中, 运行 "dotnet restore" 在根项目中,现在 Xunit 在测试中被识别项目。
问题是 vscode(或者是 Omnisharp?我不确定)可能只查看根 csproj 文件并忽略恰好位于子文件夹中的任何 csproj 文件。
我遇到了同样的问题。通过在命令面板中输入 "Restart Omnisharp" 解决了这个问题。
@areller 的解决方案解决了我的问题。我只是想扩展他的回答以提供一些示例代码,以防其他人不知道该怎么做(特别是如果你像我一样刚开始使用 C#)。
问题
首先,我按照此处的说明开始为 .NET Core 应用程序编写单元测试:
https://docs.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 对话框带有一个 "Restore" 按钮;我点击了那个;几秒钟后问题消失了。
祝你好运!
添加对根 csproj 的 xunit 引用可能是不可取的。
问题
在单独的 csproj 中进行测试的想法是,它们及其依赖项不会包含在主项目中。然而,将 xunit 添加到根 csproj 将导致主项目引用 xunit。根据产品的捆绑方式,这将导致不必要地包含 xunit dll 及其依赖的所有 dll。
不幸的是,Omnisharp 的嵌套 csproj 存在问题。看起来根 csproj 将声明所有子目录中的所有源文件,即使有嵌套的 csproj。这会导致缺少引用错误。
解决方案
不要嵌套csproj。请注意 Microsoft's xunit setup guide 如何将主 csproj 及其测试 csproj 放入 sln 的不同子目录中。
我先 运行 也遇到了这个错误,在重组项目以不嵌套 csproj 后,错误就解决了;只有测试 csproj 引用 xunit。
我遇到了同样的问题。我为我的 .Net 5 解决方案安装了 xunit.extensibility.core (2.4.1),它解决了这个问题。 xunit.runner.visualstudio (2.4.3) 已经存在。
序曲
None 以上对我有用。
原来我应该检查我之前的笔记,因为这是一个使用 Xunit 的项目中反复出现的问题:
确保所有已安装的 Xunit.xxxxxxxxx 软件包具有完全相同的版本。
出现问题 while/after 自动更新了我的 NuGet 包,在撰写本文时,它将安装 Xunit 2.4.1(以及其他几个 xunit 包在版本 2.4.1) plus xunit.runner.visualstudio
在版本 2.4.3 (!)
虽然在此 NuGet 更新期间没有报告任何异常情况,但结果是构建永久失败,其中 Fact
和 Assert
突然未知,例如
Error CS0246: The type or namespace name 'Fact' could not be found (are you missing a using directive or an assembly reference?) Imazen.Test.Webp
修复
对我有用的是去 恢复 xunit.runner.visualstudio
更新,重新安装 2.4.1。
顺便说一句,在 Visual Studio 中,这看起来像这样(在 revert/re-install 之后):
请注意,那里的包管理器暗示更新可用,一旦您再次应用该 2.4.3 更新,无论如何,您回到原点:一个奇怪的失败构建。
解决方案的关键是所有已安装的 xunit 包都具有相同的版本。 -- 如果只有少数几个在 NuGet 上有可用的更新,等待直到同一版本的所有 xunit 包都可用。
后记
不知道为什么这太挑剔了,因为我只用xunit.*
观察到这种脆弱的行为,但这是今年早些时候的工作(我忘记了),现在又发生在我身上,结果相同:强制恢复 NuGet xunit 包更新。
我正在为 .NET Core 项目使用 Visual Studio 代码。 我有一个 ASP.NET 核心项目,我想为其创建一个单独的单元测试项目,我创建了一个子文件夹和 运行
dotnet new xunit
dotnet restore
当我尝试从 cli 运行 "dotnet build" "dotnet run" 它 运行 成功时,但是在 visual studio 中,它说它不能' t 找到命名空间 Xunit
这非常难运行ge 因为Visual Studio 代码到目前为止对我来说工作得很好,它从来没有依赖性问题,只有 Xunit 有这个问题。
有人熟悉这个问题吗?
我尝试使用 vscode 直接打开测试项目(而不是打开子文件夹中包含测试项目的根项目),现在 vscode 识别 Xunit。
然后我再次用 vscode 打开根项目,将 Xunit 添加到根项目的 csproj 文件中, 运行 "dotnet restore" 在根项目中,现在 Xunit 在测试中被识别项目。
问题是 vscode(或者是 Omnisharp?我不确定)可能只查看根 csproj 文件并忽略恰好位于子文件夹中的任何 csproj 文件。
我遇到了同样的问题。通过在命令面板中输入 "Restart Omnisharp" 解决了这个问题。
@areller 的解决方案解决了我的问题。我只是想扩展他的回答以提供一些示例代码,以防其他人不知道该怎么做(特别是如果你像我一样刚开始使用 C#)。
问题
首先,我按照此处的说明开始为 .NET Core 应用程序编写单元测试: https://docs.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 对话框带有一个 "Restore" 按钮;我点击了那个;几秒钟后问题消失了。
祝你好运!
添加对根 csproj 的 xunit 引用可能是不可取的。
问题
在单独的 csproj 中进行测试的想法是,它们及其依赖项不会包含在主项目中。然而,将 xunit 添加到根 csproj 将导致主项目引用 xunit。根据产品的捆绑方式,这将导致不必要地包含 xunit dll 及其依赖的所有 dll。
不幸的是,Omnisharp 的嵌套 csproj 存在问题。看起来根 csproj 将声明所有子目录中的所有源文件,即使有嵌套的 csproj。这会导致缺少引用错误。
解决方案
不要嵌套csproj。请注意 Microsoft's xunit setup guide 如何将主 csproj 及其测试 csproj 放入 sln 的不同子目录中。
我先 运行 也遇到了这个错误,在重组项目以不嵌套 csproj 后,错误就解决了;只有测试 csproj 引用 xunit。
我遇到了同样的问题。我为我的 .Net 5 解决方案安装了 xunit.extensibility.core (2.4.1),它解决了这个问题。 xunit.runner.visualstudio (2.4.3) 已经存在。
序曲
None 以上对我有用。
原来我应该检查我之前的笔记,因为这是一个使用 Xunit 的项目中反复出现的问题:
确保所有已安装的 Xunit.xxxxxxxxx 软件包具有完全相同的版本。
出现问题 while/after 自动更新了我的 NuGet 包,在撰写本文时,它将安装 Xunit 2.4.1(以及其他几个 xunit 包在版本 2.4.1) plus xunit.runner.visualstudio
在版本 2.4.3 (!)
虽然在此 NuGet 更新期间没有报告任何异常情况,但结果是构建永久失败,其中 Fact
和 Assert
突然未知,例如
Error CS0246: The type or namespace name 'Fact' could not be found (are you missing a using directive or an assembly reference?) Imazen.Test.Webp
修复
对我有用的是去 恢复 xunit.runner.visualstudio
更新,重新安装 2.4.1。
顺便说一句,在 Visual Studio 中,这看起来像这样(在 revert/re-install 之后):
请注意,那里的包管理器暗示更新可用,一旦您再次应用该 2.4.3 更新,无论如何,您回到原点:一个奇怪的失败构建。
解决方案的关键是所有已安装的 xunit 包都具有相同的版本。 -- 如果只有少数几个在 NuGet 上有可用的更新,等待直到同一版本的所有 xunit 包都可用。
后记
不知道为什么这太挑剔了,因为我只用xunit.*
观察到这种脆弱的行为,但这是今年早些时候的工作(我忘记了),现在又发生在我身上,结果相同:强制恢复 NuGet xunit 包更新。