创建测试项目或将应用程序和测试升级到 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.扩展.选项"之间的冲突。
警告MSB3277:发现无法解决的不同版本的"Microsoft.扩展.配置.抽象"之间的冲突。
警告MSB3277:发现无法解决不同版本的"Microsoft.AspNetCore.Hosting.Abstractions"之间的冲突。
警告MSB3277:发现无法解决的不同版本的"Microsoft.Extensions.DependencyInjection.Abstractions"之间的冲突。
警告MSB3277:发现无法解决不同版本的"Microsoft.AspNetCore.Http.Abstractions"之间的冲突。
警告MSB3277:发现无法解决不同版本的"Microsoft.AspNetCore.Http.Features"之间的冲突。
如何使测试项目用于测试 Core 2.1 应用程序 ASP.NET?
更新:使用 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="..AspNetCoreAppToTestAspNetCoreAppToTest.csproj" />
</ItemGroup>
</Project>
源语言:
ASP.NET Core 2.1使用新的"共享框架"来运行 ASP.NET Core应用程序。需要使用以下方法之一修改/更新测试项目以使用此共享框架:
更改第一行中测试项目的
<Project>
标记以使用 Web SDK(Microsoft.NET.Sdk.Web
而不是Microsoft.NET.Sdk
),并在不指定版本的情况下添加对Microsoft.AspNetCore.App
的包引用(如果在 Web 项目中使用它,则.All
测试项目的项目文件 (.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="..AspNetCoreAppToTestAspNetCoreAppToTest.csproj" /> </ItemGroup> </Project>
替代方法:将
Sdk
保留原样,并向共享框架包添加PackageReference
,但指定版本。只需将 NuGet 引用添加到
Microsoft.AspNetCore.App
即可完成此操作。但是,这可能会导致问题,因为 SDK 可能会选择在发布 ASP.NET Core 的新修补程序版本时更新引用,并且更新工具以反映这一点。你将需要更新每个修补程序版本的 NuGet 参考。
该问题指定了 ASP.NET Core 2.1,但对于那些在 Core2.2中遇到相同问题 ASP.NET,将以下内容添加到测试项目文件中就足够了:
<PackageReference Include="Microsoft.AspNetCore.App" />
无需再设置Sdk="Microsoft.NET.Sdk.Web"
,也不应将版本添加到上面的包引用中 - 这会导致警告。
我遇到了同样的问题。将此添加到测试项目解决了问题
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.1"/>