问题 集成和单元测试不再适用于ASP.NET Core 2.1无法在运行时查找程序集


在创建测试项目或将应用程序和测试升级到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应用程序?


4947
2018-05-17 22:06


起源



答案:


ASP.NET Core 2.1使用新的“共享框架”来运行ASP.NET Core应用程序。需要修改/更新测试项目以使用以下方法之一使用此共享框架:

  1. 更改测试项目 <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>
    
  2. 替代方案:离开 Sdk 原样并添加一个 PackageReference 到共享框架包但指定版本。

    这可以通过简单地添加NuGet引用来完成 Microsoft.AspNetCore.App。但是,这可能会导致问题,因为在发布ASP.NET Core的新修补程序版本并更新工具以反映此情况时,SDK可能会选择更新引用。您需要为每个补丁版本更新NuGet参考。


15
2018-05-17 22:06