Le code suivant dans mon projet obtient l'erreur suivante.
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Hosting" Version="2.2.7" /> <PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" /> <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="3.0.0" /> </ItemGroup>
Erreur CS0234 Le type ou le nom d'espace de noms 'IWebHostEnvironment' n'existe pas dans l'espace de noms 'Microsoft.AspNetCore.Hosting' (vous manquez une référence d'assembly?)
J'importe déjà le package nuget.
public static IServiceCollection AddInfrastructure(this IServiceCollection services, IConfiguration configuration, Microsoft.AspNetCore.Hosting.IWebHostEnvironment environment) // Error { // ..... return services; }
4 Réponses :
Microsoft.AspNetCore.Hosting.IWebHostEnvironment
n'existe pas dans asp.net core 3, vous devez utiliser IWebHostEnvironment
place. Regardez ceci: Migration vers asp.net core 3 et annonce Github
Notez que les nouvelles méthodes d'extension IHostEnvironment IsDevelopment, IsProduction, etc. se trouvent dans l'espace de noms Microsoft.Extensions.Hosting qui peut devoir être ajouté à votre application.
vous devez donc probablement ajouter des références de package NuGet à votre projet
Je ne pense pas que cette réponse soit exacte. Je crois comprendre que "IHostEnvironment" disparaît et est remplacé par "IWebHostEnvironment". Par conséquent, "IWebHostEnvironment" DOIT exister dans 3.0. Par conséquent, je m'attendrais à ce que cette réponse commence par "Microsoft.AspNetCore.Hosting.IHostEnvironment n'existe pas dans ASP.Net Core 3 ..."
J'ai exactement votre problème et je sais comment le résoudre :)
Ajoutez ceci à votre fichier * .csproj:
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" Version="2.2.0" /> </ItemGroup>
Donc, IWebHostEnvironment
est dans le package nuget Microsoft.AspNetCore.App.
Je ne sais vraiment pas pourquoi IWebHostEnvironment
n'est pas IWebHostEnvironment
avec le package Microsoft.AspNetCore.Hosting
même s'il se trouve dans cet espace de noms. C'est vraiment déroutant. Peut-être que cela sera nettoyé à l'avenir ...
MISE À JOUR
La solution ci-dessus fonctionne sur Winidows, mais j'ai maintenant essayé de faire fonctionner ce projet sur macOS avec Visual Studio pour Mac et il ne pouvait tout simplement pas se construire. La solution à cela était comme indiqué dans les commentaires par @ mindplay.dk pour changer le type de projet en <Project Sdk="Microsoft.NET.Sdk.Web">
dans la première ligne du fichier * .csproj. (même si cela n'a aucun sens pour mon projet ClassLibrary)
Étapes à suivre pour reproduire: essayez simplement de placer IWebHostEnvironment dans un projet de bibliothèque de classes distinct et vous rencontrez tous ces problèmes ...
L'ajout de ceci comme référence de package m'a donné un avertissement (dans VS 2019) disant que vous ne devriez pas faire cela. Cette réponse m'a éclairé, mais la solution pour moi, enfin, était de changer l'attribut SDK du nœud racine du projet dans le fichier .csproj en: <Project Sdk="Microsoft.NET.Sdk.Web">
- j'ai appris ici pourquoi et comment cela fonctionne. (Je reste perplexe quant à la raison pour laquelle quelque chose d'aussi crucial ne semble apparaître nulle part dans VS 2019. Il affiche la liste des frameworks résolus , mais le paramètre SDK lui-même est introuvable)
Le basculement du Project / Sdk vers Microsoft.NET.Sdk.Web "fonctionne" en effet, mais cela nécessite également que votre "bibliothèque de classes" ait maintenant un Program.Main () ... J'obtiens cette erreur quand je ne l'ai pas: CSC : error CS5001: Program does not contain a static 'Main' method suitable for an entry point
Extension de la réponse de CodingYourLife. Lorsque vous incluez un framework supplémentaire, vous devez l'inclure avec la balise FrameworkReference
pour qu'il se charge correctement:
<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>
Si vous souhaitez utiliser Microsoft.AspNetCore.Hosting.IWebHostEnvironment
dans un projet de bibliothèque distinct autre que votre projet Web, vous devez ajouter explicitement la référence de package Microsoft.AspNetCore.App
au projet de bibliothèque en modifiant le fichier de projet.
Dans Dotnet 5.0 également, nous devons suivre la même approche.
<Project SDK="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Library</OutputType> <TargetFramework>net5.0</TargetFramework> </PropertyGroup> <ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup> <ItemGroup>...</ItemGroup> </Project>
Les images de code posent toutes sortes de problèmes d'utilisabilité; veuillez coller le texte sous forme de texte. Voir aussi meta.stackoverflow.com/questions/303812/...
quelle version de Core utilisez-vous? vos versions de package semblent partout. Assurez-vous de référencer le package égal à la même version de votre cible principale
.net core 3.0 ...
Dans le projet github.com/JasonGT/NorthwindTraders , le même code existe et il n'y a pas d'erreur. github.com/JasonGT/NorthwindTraders/blob/master/Src/…
J'ai trouvé que l'erreur avait disparu après avoir ajouté
<PackageReference Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="3.0.0" />
.Sous Dépendances -> Frameworks, vérifiez que Microsoft.AspNetCore. App et Microsoft.NETCore.App sont référés. J'ai vérifié mon projet dans Visual Studio et j'ai trouvé ceci. Veuillez essayer ceci et laissez-moi savoir. Je n'ai pas utilisé le pkg ref mentionné par vous et mon code fonctionne sans cela
1. "J'importe déjà le paquet nuget." : Notez que vous faites référence à
Microsoft.AspNetCore.Hosting
of2.2
. Cependant,IWebHostEnvironment
est introduit depuis la version3.0
. 2. Pouvez-vous nous montrer le*.csproj
? Parce qu'il doit s'agir d'une interface intégrée depuis ASP.NET Core 3.0.Est-ce que cela répond à votre question? ASP.NET Core 3.1 Obtenir le chemin wwwroot dans une bibliothèque de classes distincte