.Net 6 单元测试项目无法加载项目引用

问题描述 投票:0回答:1
  • 我在 Windows 10 上使用 Visual Studio 2022 Enterprise。
  • 我有一个针对 .Net 标准 2.0 的 C# 类库项目(我们称之为
    Project1
    )。该项目有对其他 C# 类库的项目引用,其中也有针对 .Net 标准 2.0.
  • 我创建了一个 .Net 6 单元测试项目(我们称之为
    UnitTestProject
    )来测试
    Project1
    .
  • 所有项目都在同一个解决方案中。

UnitTestProject
有这些包装参考

<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="MSTest.TestAdapter" />
<PackageReference Include="MSTest.TestFramework" />
Microsoft.NET.Test.Sdk 17.5.0
MSTest.TestAdapter 3.0.2
MSTest.TestFramework 3.0.2

UnitTestProject
引用
Project1 
使用项目引用,因为在同一个解决方案中。

<ProjectReference Include="..\Project1\Project1.csproj">
  <Private>False</Private>
</ProjectReference>

这是文件夹结构

C:\myapp\myapp.sln
C:\myapp\sources\Project1\Project1.cspoj
C:\myapp\sources\UnitTestProject\UnitTestProject.csproj

构建输出

C:\myapp\sources\bin\Project1.dll
C:\myapp\sources\unittest\net6.0\UnitTestProject.dll

我正在为位于

C:\myapp\.runsettings

的单元测试项目使用 .runsettings 文件
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>False</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>True</DeploymentEnabled>
    <AssemblyResolution>
      <Directory path="..\..\" includeSubDirectories="true"/>
    </AssemblyResolution>
  </MSTest>
</RunSettings>

我可以毫无错误地清理和重建所有相关项目,一切都成功了。

但是当我尝试在

UnitTestProject
中执行任何测试方法时,结果显示

测试运行完成:0 次测试(0 次通过,0 次失败,0 次跳过)在 < 1 ms

中运行

当我检查测试窗格时,日志记录级别设置为诊断。我看到这条消息

[警告] [MSTest][发现][C:\myapp\sources\unittest et6.0\UnitTestProject.dll] 无法从测试源 'C:\myapp\sources\unittest 加载类型 et6.0\UnitTestProject.dll'。此来源中的部分或全部测试可能不会被发现。 错误:System.IO.FileNotFoundException:无法加载文件或程序集“Project1,Version=1.5.0.0,Culture=neutral,PublicKeyToken=null”。系统找不到指定的文件。

同样在测试输出窗格中,运行设置与 RunConfiguration 一起显示。

<RunSettings>
  <MSTest>
    <MapInconclusiveToFailed>True</MapInconclusiveToFailed>
    <CaptureTraceOutput>False</CaptureTraceOutput>
    <DeleteDeploymentDirectoryAfterTestRunIsComplete>False</DeleteDeploymentDirectoryAfterTestRunIsComplete>
    <DeploymentEnabled>True</DeploymentEnabled>
    <AssemblyResolution>
      <Directory path="..\..\" includeSubDirectories="true" />
    </AssemblyResolution>
  </MSTest>
  <RunConfiguration>
    <ResultsDirectory>C:\myapp\TestResults</ResultsDirectory>
    <SolutionDirectory>C:\myapp\</SolutionDirectory>
    <MaxCpuCount>0</MaxCpuCount>
    <EnvironmentVariables>
      <VSTEST_BACKGROUND_DISCOVERY>1</VSTEST_BACKGROUND_DISCOVERY>
    </EnvironmentVariables>
    <CollectSourceInformation>False</CollectSourceInformation>
  </RunConfiguration>
</RunSettings>

如果我将

Copy Local to Yes (<Private>True</Private>)
设置为项目参考,我就可以在测试项目中执行所有测试。

我不知道这里有什么问题,如果这里的整个设置不正确或其他问题,请帮忙。谢谢。

我试过将

UnitTestProject 
构建到 unittest 文件夹中(没有 net6.0)。

C:\myapp\sources\unittest\UnitTestProject.dll

并将.runsettings中的

<Directory>
..\..\
更改为
..\

<AssemblyResolution>
  <Directory path="..\" includeSubDirectories="true"/>
</AssemblyResolution>

还是不行。

我什至尝试将

Project1 
定位到 .Net 6,但效果不佳。

编辑: 我将日志记录级别设置为 Trace,并在跟踪文件中

AssemblyResolver.OnResolve:Project1:解析程序集。 AssemblyResolver.OnResolve:项目 1:搜索: 'C:\myapp\sources\unittest et6.0'。 AssemblyResolver.OnResolve: 项目 1:程序集路径不存在: 'C:\myapp\sources\unittest et6.0\Project1.dll', 返回.
AssemblyResolver.OnResolve:项目 1:程序集路径不存在: 'C:\myapp\sources\unittest et6.0\Project1.exe', 返回.
AssemblyResolver.OnResolve:项目 1:无法加载程序集。

它似乎没有使用我在

runsettings
下专门指定
Directory path
AssemblyResolution

文件
c# unit-testing .net-6.0 .net-standard-2.0
1个回答
0
投票

您可以尝试使用绝对路径进行测试。我想这是因为只有路径我也遇到过类似的问题并且能够使用绝对路径进行调试。

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.