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

标签 testing asp.net-core .net-core asp.net-core-2.1

在创建测试项目或将应用程序和测试升级到 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 应用程序。需要修改/更新测试项目以使用以下方法之一使用此共享框架:

  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到共享框架包,但指定一个版本。

    这可以通过简单地添加对 Microsoft.AspNetCore.App 的 NuGet 引用来完成。 .但是,这可能会导致问题,因为当发布 ASP.NET Core 的新补丁版本时,SDK 可能会选择更新引用,并且更新工具以反射(reflect)这一点。您将需要为每个补丁版本更新 NuGet 引用。

关于testing - 集成和单元测试不再适用于无法在运行时找到程序集的 ASP.NET Core 2.1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50401152/

相关文章:

c# - Asp.Net Core Web 应用程序静态文件在 Linux 上给出 404

postgresql - .NET Core 使用 NLog 记录到 PostgreSQL DB

.net - 更新到 .NET Core SDK 2.1.4 后缺少 dotnet

.net - 对 Windows 窗体应用程序进行模糊测试有什么好的工具或技巧吗?

angularjs - 无法在 Internet Explorer 11 上运行 Protractor

visual-studio - Visual Studio 2017 项目引用旧版本的 Microsoft.AspNetCore.App

Azure Web 应用服务 "container is unhealthy"错误强制容器每 15 分钟重新启动一次

.net - 从 .NET 类执行 QTP 自动化,而不启动 QTP 实例

java - 如何告诉 Spring Boot 使用另一个数据库进行测试?

c# - 配置 AspNetCore TestServer 返回 500 而不是抛出异常