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?
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:
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>
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.
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.