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

Mar*_*ich 41 testing .net-core asp.net-core 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应用程序?

Mar*_*ich 69

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

  1. 更改dotnet --version第一行中的测试项目标记以使用Web SDK(2.2.100而不是Microsoft.NET.Sdk)并添加包引用<Project>(或者Microsoft.NET.Sdk.Web如果您在Web项目中使用它),而不指定版本

    现在,测试项目的项目文件(.csproj)应如下所示:

        <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>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 替代方法:保持Microsoft.NET.Sdk原样并添加Microsoft.AspNetCore.App到共享框架包但指定版本.

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


EM0*_*EM0 10

该问题指定了ASP.NET Core 2.1,但是对于那些遇到与ASP.NET Core 2.2相同的问题的人,只需将以下内容添加到测试项目文件中即可:

<PackageReference Include="Microsoft.AspNetCore.App" />
Run Code Online (Sandbox Code Playgroud)

没有必要设置Sdk="Microsoft.NET.Sdk.Web"了,你应该不是一个版本添加到上述卷装基准-这将导致警告。