在创建测试项目或将应用程序和测试升级到ASP.NET Core 2.1 / .NET Core 2.1时,运行测试会因装配加载异常而失败
System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.AspNetCore,Version = 2.1.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'。该系统找不到指定的文件。
添加对其他库的引用时,还会生成类似的警告
警告MSB3277:发现无法解析的“Microsoft.Extensions.Options”的不同版本之间发生冲突。
警告MSB3277:发现无法解析的“Microsoft.Extensions.Configuration.Abstractions”的不同版本之间发生冲突。
警告MSB3277:发现无法解析的“Microsoft.AspNetCore.Hosting.Abstractions”的不同版本之间发生冲突。
警告MSB3277:发现无法解析的“Microsoft.Extensions.DependencyInjection.Abstractions”的不同版本之间发生冲突。
警告MSB3277:发现无法解析的“Microsoft.AspNetCore.Http.Abstractions”的不同版本之间发生冲突。
警告MSB3277:发现无法解析的“Microsoft.AspNetCore.Http.Features”的不同版本之间发生冲突。
如何使测试项目能够用于测试ASP.NET Core 2.1应用程序?
ASP.NET Core 2.1使用新的“共享框架”来运行ASP.NET Core应用程序。需要修改/更新测试项目以使用以下方法之一使用此共享框架:
更改测试项目 <Project>
在第一行中标记以使用Web SDK(Microsoft.NET.Sdk.Web
代替 Microsoft.NET.Sdk
)并添加一个包引用 Microsoft.AspNetCore.App
(要么 .All
如果你在web项目中使用它) 没有指定版本
现在,测试项目的项目文件(.csproj)应如下所示:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Testing" Version="2.1.1" />
<PackageReference Include="Microsoft.AspNetCore.App" />
<!-- other references to xunit, test SDK etc. -->
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AspNetCoreAppToTest\AspNetCoreAppToTest.csproj" />
</ItemGroup>
</Project>
替代方案:离开 Sdk
原样并添加一个 PackageReference
到共享框架包但指定版本。
这可以通过简单地添加NuGet引用来完成 Microsoft.AspNetCore.App
。但是,这可能会导致问题,因为在发布ASP.NET Core的新修补程序版本并更新工具以反映此情况时,SDK可能会选择更新引用。您需要为每个补丁版本更新NuGet参考。