web-dev-qa-db-fra.com

L'intégration et les tests unitaires ne fonctionnent plus lorsque ASP.NET Core 2.1 ne parvient pas à trouver les assemblys au moment de l'exécution

Lors de la création de projets de test ou de la mise à niveau d’une application et de tests vers ASP.NET Core 2.1/.NET Core 2.1, l’exécution de tests échoue avec des exceptions de charge d’Assembly telles que

System.IO.FileNotFoundException: impossible de charger le fichier ou l'assembly 'Microsoft.AspNetCore, version = 2.1.0.0, Culture = neutre, PublicKeyToken = adb9793829ddae60'. Le système ne peut pas trouver le fichier spécifié.

Lors de l'ajout de références à d'autres bibliothèques, des avertissements de construction tels que

avertissement MSB3277: Des conflits détectés entre différentes versions de "Microsoft.Extensions.Options" n'ont pas pu être résolus.
warning MSB3277: Conflits détectés entre différentes versions de "Microsoft.Extensions.Configuration.Abstractions" qui n'ont pas pu être résolus.
warning MSB3277: Conflits détectés entre différentes versions de "Microsoft.AspNetCore.Hosting.Abstractions" qui n'ont pas pu être résolus.
warning MSB3277: Conflits détectés entre différentes versions de "Microsoft.Extensions.DependencyInjection.Abstractions" qui n'ont pas pu être résolus.
warning MSB3277: Conflits détectés entre différentes versions de "Microsoft.AspNetCore.Http.Abstractions" qui n'ont pas pu être résolus.
warning MSB3277: Des conflits trouvés entre différentes versions de "Microsoft.AspNetCore.Http.Features" n'ont pas pu être résolus.

Comment puis-je utiliser des projets de test pour tester des applications ASP.NET Core 2.1?

39
Martin Ullrich

Mise à jour: Cela a été simplifié avec 2.2 Outillage. Assurez-vous que votre dotnet --version La version du SDK est au moins 2.2.100, même en construisant des applications 2.1

Ajoutez simplement une référence de package sans version à votre projet tout en conservant le 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>

Original:

ASP.NET Core 2.1 utilise un nouveau "framework partagé" sur lequel exécuter les applications ASP.NET Core. Les projets de test doivent être modifiés/mis à jour pour utiliser également ce cadre partagé en utilisant l'une des approches suivantes:

  1. Changer le projet de test <Project> balise dans la première ligne pour utiliser le SDK Web (Microsoft.NET.Sdk.Web au lieu de Microsoft.NET.Sdk) et ajoutez une référence de package à Microsoft.AspNetCore.App (ou .All _ si vous utilisez cela dans le projet Web) sans spécifier de version

    Le fichier de projet (.csproj) du projet test devrait maintenant ressembler à ceci:

    <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. Alternative: laissez le Sdk en l'état et ajoutez un PackageReference au package de framework partagé, mais spécifiez une version.

    Cela peut être fait en ajoutant simplement une référence NuGet à Microsoft.AspNetCore.App. Toutefois, cela peut poser problème car le kit de développement logiciel peut choisir de mettre à jour la référence lorsqu'une nouvelle version du correctif d'ASP.NET Core est publiée et que les outils sont mis à jour en conséquence. Vous aurez besoin de mettre à jour la référence NuGet pour chaque version de correctif.

66
Martin Ullrich

La question spécifie ASP.NET Core 2.1, mais pour ceux qui rencontrent le même problème avec ASP.NET Core 2.2 , il suffit d’ajouter ce qui suit à votre test dossier de projet:

<PackageReference Include="Microsoft.AspNetCore.App" />

Il y a pas besoin pour mettre Sdk="Microsoft.NET.Sdk.Web" plus et vous devriez pas ajouter une version à la référence du paquet ci-dessus - cela provoque un avertissement.

3
EM0