Visual Studio ~ Test项目找不到测试项目的命名空间

du7egjpx  于 2022-11-17  发布在  其他
关注(0)|答案(5)|浏览(197)

我有一个C#ASP.NET核心项目,我想为它编写测试。但是,由于某种奇怪的原因,测试项目找不到我想测试的项目的命名空间(以及类)。即使我明确引用了主项目,这种情况也会发生。这是怎么回事?
我得到的具体错误是:

The type or namespace name 'DeviceWebDisplay' could not be found (are you missing a using directive or an assembly reference?)

如前所述,即使我 * 确实 * 添加了对DeviceWebDisplay的项目引用,也会发生这种情况。实际上,VisualStudio甚至为我提供了“添加对'DeviceWebDisplay'的引用”的快速操作。但是,无论我是否已经添加了该操作,单击该快速操作都没有任何效果。
有没有人知道是什么原因造成的?作为参考,这里是我在这两个项目中使用的模板:

  • 设备网络显示:ASP.NET核心Web应用程序
  • 设备Web显示测试:公寓测试项目(.NET Framework)

编辑:

我想它可能是测试项目的目标框架,但由于某种原因,它只升级到6.0,并且下载网站(当我单击“安装其他框架...”时)不提供任何Visual Studio 2022的SDK。

问题是,我的Visual Studio显然安装了.NET 6.0,否则我将无法在主项目中使用它。
可能我需要为测试项目使用不同的模板吗?

ee7vknir

ee7vknir1#

我发现了问题所在。
基本原因是我基于“单元测试项目(. NETFramework)”模板创建了测试项目。
现在,我创建了基于“MSTest Test Project”模板的第二个测试项目,在那里我可以选择版本6.0。之后,我还可以简单地从上一个测试项目中复制我的测试,然后它就可以正常工作了。

7kqas0il

7kqas0il2#

问题是您的项目DeviceWebDisplay目标.net 6,而您的测试项目DeviceWebDisplayTest目标.NETFramwork,Version=4.7.2
.NETFramwork,Version=4.7.2为目标的项目不能引用项目目标.net6
您应该创建一个新的测试项目目标.net 6
阅读更多关于differance between .NET vs .NET Framework for server apps的信息

dauxcl2d

dauxcl2d3#

FWIW,我今天遇到了这个问题,它似乎是由于我的解决方案中有两个不同的“测试”项目,每个项目都试图使用不同版本的UnitTestFramework引起的。通过确保它们都使用相同的版本,它解决了我的测试项目无法解析解决方案中项目的命名空间的问题。

pu3pd22g

pu3pd22g4#

出现了相同的问题,但这是由于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>
bpzcxfmw

bpzcxfmw5#

对我来说,问题是单元测试项目没有指明以哪个版本的Windows为目标。我的应用程序是一个使用IdeNet 6. 0的WPF应用程序。
我可以通过执行以下操作来解决此问题:

  • 在[方案总管]中,选取要测试的目的项目(通常是主应用程序或程式库)。
  • 按ALT-ENTER打开项目文件。请注意目标窗口的版本。
  • 选择xUnit(或NUnit)测试项目。按Alt-Enter打开项目文件。可能未选择Windows版本。选择要作为目标的操作系统。必须与应用程序的目标操作系统匹配。

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

相关问题