44 votes

Les tests d'intégration et d'unité ne fonctionnent plus sur ASP.NET Core 2.1 ne parvenant pas à trouver des assemblages à l'exécution

Lors de la création de projets de test ou de mise à niveau d'une application et les tests à ASP.NET de Base 2.1 / .NET de Base 2.1, l'exécution de tests échoue avec l'assemblée de la charge exceptions comme

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

Lors de l'ajout de références à certains autres bibliothèques il y a aussi construire des avertissements du genre

avertissement MSB3277: Trouvé les conflits entre les différentes versions de Microsoft.Extensions.Options" qui n'a pas pu être résolu.
avertissement MSB3277: Trouvé les conflits entre les différentes versions de Microsoft.Extensions.La Configuration.Abstractions" qui n'a pas pu être résolu.
avertissement MSB3277: Trouvé les conflits entre les différentes versions de Microsoft.AspNetCore.De l'hébergement.Abstractions" qui n'a pas pu être résolu.
avertissement MSB3277: Trouvé les conflits entre les différentes versions de Microsoft.Extensions.DependencyInjection.Abstractions" qui n'a pas pu être résolu.
avertissement MSB3277: Trouvé les conflits entre les différentes versions de Microsoft.AspNetCore.Http.Abstractions" qui n'a pas pu être résolu.
avertissement MSB3277: Trouvé les conflits entre les différentes versions de Microsoft.AspNetCore.Http.Caractéristiques" qui n'a pas pu être résolu.

Comment puis-je faire de test des projets de travaux pour les tests ASP.NET de Base 2.1 applications?

74voto

Martin Ullrich Points 5894

Mise à jour: Cela a été rendu plus facile avec le 2.2 de l'Outillage. Assurez-vous que votre dotnet --version version du SDK est au moins 2.2.100, même lorsque l'immeuble 2.1 applications

Il suffit d'ajouter une versionless package référence à votre projet tout en gardant l' 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>

Origine:

ASP.NET de Base 2.1 utilise un nouveau "cadre commun" pour exécuter ASP.NET les applications de Base sur. Projets de Test besoin d'être modifié ou mis à jour également utiliser ce cadre de travail commun à l'aide de l'une des approches suivantes:

  1. Modifier le projet de test <Project> balise dans la première ligne à utiliser le web SDK (Microsoft.NET.Sdk.Web au lieu de Microsoft.NET.Sdk) et ajouter un paquet de référence pour Microsoft.AspNetCore.App (ou .All si vous utilisez qu'à l'intérieur du projet web) sans indiquer de version

    Le fichier de projet (.csproj) du projet de 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: sortir de l' Sdk et ajouter un PackageReference pour le cadre commun package, mais spécifier une version.

    Cela peut être fait simplement en ajoutant un NuGet référence à l' Microsoft.AspNetCore.App. Toutefois, cela pourrait provoquer des problèmes depuis le SDK peut choisir de mettre à jour la référence quand un nouveau patch de libération de la ASP.NET Core est libéré et l'outillage est mis à jour pour refléter cela. Vous aurez besoin de mettre à jour le NuGet de référence pour chaque patch de la libération.

11voto

E M Points 353

La question spécifie ASP.NET Core 2.1, mais pour ceux qui se heurtent au même problème avec ASP.NET Core 2.2, il suffit d'ajouter ce qui suit à votre fichier de projet de test :

Il n'est plus nécessaire de définir et vous ne devez pas ajouter une version à la référence du `` paquet ** ci-dessus - qui provoque un avertissement.

-2voto

debugguru Points 1

J'avais le même problème. Ajoutez ceci à Test Project résolu le problème

<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js"> <div class="snippet-code">

</div></div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X