我有一个非常简单的点网核心项目。其中包括一个基于kestrel的MockServerLibrary,它在单元测试中返回一些简单的REST响应。
完整的设置可以在dotnetCore2.2上正常运行。切换到dotnetCore3.0会在服务器启动时产生错误:
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]
完成的。当我单独启动MockServer的main
-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中删除),但是当从单元测试开始时,似乎无法自动加载它们。
也许已经是错误,因为unitTest-Project直接引用了ServerMock:
<ItemGroup>
<ProjectReference Include="..\ServerMock\ServerMock.csproj" />
并且ServerStart在[OneTimeSetup]
中的连接非常硬:
await RestMockStarter.RunServer(null);
我已经尝试将unitTest-Project的类型更改为Microsoft.NET.Sdk.Web
,但是这样就不再有可能启动/查看任何unitTest(至少使用Rider,所以我认为这不是我应该的方式)尝试解决问题)
答案 0 :(得分:0)
我能够解决问题:
(1)将ServerMock项目的csproj
文件更改为
<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>
从那时起,我假设它成为一个“常规”的点网核心项目,并且使用<FrameworkReference Include="Microsoft.AspNetCore.App" />
再次引用了Web扩展。
(2)已添加
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
也要到单元测试的csproj
。
(3)在这一点上,它仍然令人沮丧,因为该错误仍然发生,但是deleting the bin/obj-folder随后突然有所帮助。