我正在使用Visual Studio Code进行.NET核心项目。 我有一个ASP.NET核心项目,我想创建一个单独的单元测试项目,我创建了一个子文件夹并运行
dotnet new xunit
dotnet restore
当我试图从cli“dotnet build”“dotnet run”运行它时它运行成功,但是在visual studio中,它说它无法找到名称空间Xunit
这是非常奇怪的,因为到目前为止,Visual Studio代码对我来说运行良好,它从来没有依赖性问题,它只与Xunit有这个问题。
有谁熟悉这个问题?
答案 0 :(得分:10)
我有同样的问题。通过键入"重新启动Omnisharp"解决了这个问题。在命令面板中。
答案 1 :(得分:7)
我尝试使用vscode直接打开测试项目(而不是在子文件夹中打开包含测试项目的根项目),现在vscode识别Xunit。
然后我再次使用vscode打开根项目,将Xunit添加到根项目的csproj文件中,运行" dotnet restore"在根项目中,现在Xunit在测试项目中被识别。
问题是vscode(或者是Omnisharp?我不确定)可能只查看根csproj文件并忽略恰好位于子文件夹中的任何csproj文件。
答案 2 :(得分:1)
@ 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对话框附带一个“恢复”按钮;我点击了那个;几秒钟后问题就消失了。
祝你好运!答案 3 :(得分:1)
将xunit引用添加到根csproj可能是不希望的。
在单独的csproj中进行测试的想法是,测试及其依赖项不会包含在主项目中。但是,将xunit添加到根csproj会导致主项目引用xunit。根据产品的捆绑方式,这将导致不必要地包含xunit dll及其所依赖的所有dll。
不幸的是,Omnisharp的嵌套csproj有问题。似乎即使有嵌套的csproj,根csproj也会声明所有子目录中的所有源文件。这会导致缺少参考错误。
请勿嵌套csproj。请注意Microsoft's xunit setup guide如何将主csproj及其测试csproj放入sln的不同子目录中。
我也首先遇到此错误,并且在将项目重组为不嵌套csproj之后,该错误已得到解决;仅测试csproj引用xunit。
答案 4 :(得分:0)
我遇到了同样的问题。我为我的 .Net 5 解决方案安装了 xunit.extensibility.core (2.4.1),它解决了这个问题。 xunit.runner.visualstudio (2.4.3) 已经存在。