Visual Studio测试项目找不到被测试项目的命名空间。

3
我有一个C# ASP.NET Core项目,想要为其编写测试。然而,由于某种奇怪的原因,测试项目无法找到我想要测试的项目的命名空间(因此也无法找到类)。即使我明确引用了主项目,这种情况仍然会发生。这是怎么回事?
我收到的具体错误如下:
The type or namespace name 'DeviceWebDisplay' could not be found (are you missing a using directive or an assembly reference?)

正如之前提到的,即使我已经将项目引用添加到DeviceWebDisplay中,这种情况仍然会发生。事实上,VisualStudio甚至为我提供了快捷操作“添加引用到‘DeviceWebDisplay’”。但是,无论我是否已经添加了此内容,单击该快速操作都不会产生任何效果。
有没有人知道是什么原因导致的?供参考,这是我用于两个项目的模板:
  • DeviceWebDisplay:ASP.NET Core Web应用程序
  • DeviceWebDisplayTest:单元测试项目(.NET Framework)

enter image description here

编辑:

我认为可能是测试项目的目标框架,但由于某种原因,该框架只支持6.0版本,而且下载网站(当我点击“安装其他框架...”时)没有提供Visual Studio 2022的任何SDK。

enter image description here

enter image description here

事实是,我的 Visual Studio 明显已安装了 .NET 6.0,否则我就无法在主项目中使用它。

也许我需要为测试项目使用不同的模板吗?


你尝试过添加项目引用吗? - raBinn
5个回答

6
我找到了问题所在。
基本原因是我根据“Unit Test Project (.NET Framework)”模板创建了我的测试项目。由于某种原因,该框架不支持4.8以上的.NET版本。
现在我创建了第二个测试项目,使用“MSTest Test Project”模板。在那里,我可以选择版本6.0。然后,我还能够简单地将之前的测试复制到新的测试项目中,这样一切就正常工作了。

如果您的问题已经解决,请考虑接受答案 - Xingyu Zhao
@kira 当我看到你的答案基于我的回答获得了5个赞,而我只得到了2个赞!这让我心痛,开玩笑的。 - Ibram Reda

2
问题在于您的项目 DeviceWebDisplay 目标为 .net 6,而您的测试项目 DeviceWebDisplayTest 目标为 .NETFramwork,Version=4.7.2
目标为 .NETFramwork,Version=4.7.2 的项目无法引用目标为 .net6 的项目。
您应该创建一个新的测试项目,目标为 .net 6
了解更多关于服务器应用程序中 .NET 和 .NET Framework 的区别,请阅读此文

我尝试过了,但那里可用的最大目标框架是4.8,而且我找不到下载更高版本的选项。我会在主贴中添加有关此事的详细信息。 - Kira Resari
1
.net and .NETFramwork is different, You should create a new test project which depend on .net 6 - Ibram Reda

0

我曾经遇到过同样的问题,但是这是由于VS没有正确更新.csproj文件导致的。

我向我的解决方案中添加了一个新的测试项目,并为我正在尝试测试的项目添加了一个项目依赖项。然而,即使测试项目依赖项显示了正确的项目,{test project}.csproj也没有指向它的ProjectReference标签。

为了解决这个问题,我只需手动添加ProjectReference ItemGroup xml即可。

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

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <IsPackable>false</IsPackable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
    <PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
    <PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
    <PackageReference Include="coverlet.collector" Version="3.1.2" />
  </ItemGroup>

    <ItemGroup>
        <ProjectReference Include="..\{project dir}\{project}.csproj" />
    </ItemGroup>

</Project>

0

顺便提一下,我今天遇到了这个问题,似乎是由于我的解决方案中有两个不同的“test”项目,它们分别尝试使用不同版本的 UnitTestFramework 导致的。通过确保它们都使用相同的版本,解决了测试项目无法解析解决方案中项目名称空间的问题。


0
对我来说问题是单元测试项目没有指明要针对哪个版本的Windows。
我的应用是使用 .net6.0 的 WPF 应用程序。
我通过以下方式解决了这个问题:
  • 在“解决方案资源管理器”中选择目标测试项目(通常是主应用程序或库)。

  • 按 ALT-ENTER 打开项目文件。注意所针对的 Windows 版本。

  • 选择 xUnit(或 NUnit)测试项目。按 ALT-ENTER 打开项目文件。Windows 版本可能尚未选定。选择一个操作系统以进行目标设置。必须与应用程序的目标操作系统相匹配。

这样就解决了我的 NUnit 和 xUnit 问题。

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