在创建测试项目或将应用程序和测试升级到 ASP.NET Core 2.1/.NET Core 2.1 时,运行测试失败并出现程序集加载异常,例如
System.IO.FileNotFoundException : Could not load file or assembly 'Microsoft.AspNetCore, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
当添加对其他一些库的引用时,也会出现类似这样的构建警告
warning MSB3277: Found conflicts between different versions of "Microsoft.Extensions.Options" that could not be resolved.
warning MSB3277: Found conflicts between different versions of "Microsoft.Extensions.Configuration.Abstractions" that could not be resolved.
warning MSB3277: Found conflicts between different versions of "Microsoft.AspNetCore.Hosting.Abstractions" that could not be resolved.
warning MSB3277: Found conflicts between different versions of "Microsoft.Extensions.DependencyInjection.Abstractions" that could not be resolved.
warning MSB3277: Found conflicts between different versions of "Microsoft.AspNetCore.Http.Abstractions" that could not be resolved.
warning MSB3277: Found conflicts between different versions of "Microsoft.AspNetCore.Http.Features" that could not be resolved.
如何让测试项目用于测试 ASP.NET Core 2.1 应用程序?
最佳答案
更新:2.2 工具 使这变得更容易。确保您的 dotnet --version
SDK 版本至少为 2.2.100
, 即使在构建 2.1 应用程序时也是如此
只需在保留 Microsoft.NET.Sdk
的同时向您的项目添加无版本包引用:
<Project Sdk="Microsoft.NET.Sdk">
<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>
原文:
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
到共享框架包,但指定一个版本。这可以通过简单地添加对
Microsoft.AspNetCore.App
的 NuGet 引用来完成。 .但是,这可能会导致问题,因为当发布 ASP.NET Core 的新补丁版本时,SDK 可能会选择更新引用,并且更新工具以反射(reflect)这一点。您将需要为每个补丁版本更新 NuGet 引用。
关于testing - 集成和单元测试不再适用于无法在运行时找到程序集的 ASP.NET Core 2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401152/