c# - 从 donetCore 3.0 中的单元测试项目初始化 Microsoft.NET.Sdk.Web-Project 失败
问题描述
我有一个非常简单的 dot-net-core 项目。这包括一个基于 kestrel 的小 MockServerLibrary,它在单元测试中返回一些简单的 REST 回复。
完整的设置在 dotnetCore2.2 上运行良好。切换到dotnetCore3.0会导致Server启动报错:
Output stream: Unhandled exception. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Extensions.Hosting.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. Das System kann die angegebene Datei nicht finden.
File name: 'Microsoft.Extensions.Hosting.Abstractions, Version=3.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'
at ServerMock.RestMockStarter.RunServer(String[] args)
at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
但只有,如果这是由[OneTimeSetup]
单元测试项目的 完成的。main
当我单独启动 MockServer 的-Method 时,服务器启动正常。
我的假设是,服务器启动失败,因为 ServerMock 是
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
<LangVersion>8</LangVersion>
</PropertyGroup>
(...)
但 unitTestProject 是
<Project Sdk="Microsoft.NET.Sdk">
(...)
<ItemGroup>
<PackageReference Include="nunit" Version="3.11.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
</ItemGroup>
(...)
这在 2.2 中似乎不是问题,因为我们需要显式引用 ServerMock 中的包
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.HttpsPolicy" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" Version="2.2.0" />
</ItemGroup>
据我了解,不再需要这些参考(更多:需要使用 3.0 删除),但从我的单元测试开始时,它们似乎无法自动加载。
也许错误已经存在,ServerMock 被 unitTest-Project 直接引用:
<ItemGroup>
<ProjectReference Include="..\ServerMock\ServerMock.csproj" />
并且 ServerStart 在以下方面非常硬连线[OneTimeSetup]
:
await RestMockStarter.RunServer(null);
我已经尝试将 unitTest-Project 的类型更改为Microsoft.NET.Sdk.Web
,但是不再可能启动/查看任何 unitTests(至少对于 Rider,所以我认为这不是我应该尝试解决问题的方式)
解决方案
我能够解决问题:
(1) 将 ServerMock-project 的csproj
-file 更改为
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.0</TargetFramework>
<LangVersion>8</LangVersion>
</PropertyGroup>
<ItemGroup>
<Folder Include="Properties" />
</ItemGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
从那时起,我认为它成为了一个“常见的”dot-net-core 项目,并且<FrameworkReference Include="Microsoft.AspNetCore.App" />
对网络扩展的引用再次明确。
(2) 增加
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
也到单元测试csproj
。
(3) 在那一点上,它变得有点令人沮丧,因为错误仍然存在,但删除 bin/obj 文件夹突然有所帮助。
推荐阅读
- java - 手动更新具有少量属性的休眠环境审计表
- c++ - 代码运行完美,但运行后以分段错误结束
- opengl-es - OpenGL ES:将 RGB 转换为 HSV,而不是 HSL
- reactjs - useState() not updating inside of useEffect() hook
- c# - 如何在 Itemssource 绑定时从 DataContext 绑定属性?
- python - 如何在 python 中搜索替换和合并文本文件?
- ajax - 数据表中 ajax.data 中的“d”从何而来?
- ios - 使用 PDFKit Swift (ios)/Capacitor 加载 PDF 而不下载文件
- typescript - 如何从 Typescript 中的联合中删除空白接口类型
- c++ - 如何从 Qt 应用程序使用 QProcess 生成 PostgreSQL 备份