Ci-dessous le code pour répliquer l'erreur pour certaines extensions que j'essaie de créer dans un nouveau projet d'API ASP.NET Core 3.0.
using ClassLibrary1;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
namespace WebApplication1
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureAppConfiguration((context, config) =>
{
// this works fine
var env = context.HostingEnvironment;
});
webBuilder.CustomConfigureAppConfiguration();
})
.ConfigureAppConfiguration((context, config) =>
{
// this works fine
var env = context.HostingEnvironment;
})
.CustomConfigureAppConfiguration();
}
}
Cette classe Extensions
doit être dans un projet différent. Semble bien fonctionner dans le même projet principal.
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
// This project can be either netstandard2.0 or netcoreapp3.0
namespace ClassLibrary1
{
public static class Extensions
{
public static IWebHostBuilder CustomConfigureAppConfiguration(this IWebHostBuilder hostBuilder)
{
hostBuilder.ConfigureAppConfiguration((context, config) =>
{
// this fails with System.MissingMethodException: 'Method not found: 'Microsoft.AspNetCore.Hosting.IHostingEnvironment Microsoft.AspNetCore.Hosting.WebHostBuilderContext.get_HostingEnvironment()'.'
var env = context.HostingEnvironment;
});
return hostBuilder;
}
public static IHostBuilder CustomConfigureAppConfiguration(this IHostBuilder hostBuilder)
{
hostBuilder.ConfigureAppConfiguration((context, config) =>
{
// this fails with System.MissingMethodException: 'Method not found: 'Microsoft.Extensions.Hosting.IHostingEnvironment Microsoft.Extensions.Hosting.HostBuilderContext.get_HostingEnvironment()'.'
var env = context.HostingEnvironment;
});
return hostBuilder;
}
}
}
Il échoue uniquement lors de l'exécution, et uniquement lors de l'accès à HostingEnvironment
. Lorsque vous supprimez/commentez le var env = context.HostingEnvironment;
affectation, je peux toujours l'inspecter et l'afficher correctement dans le débogage.
Une idée de ce qui me manque ici?
MODIFIER
Mise à jour du ClassLibrary1
projeter vers netcoreapp3.0
et en ajoutant <FrameworkReference Include="Microsoft.AspNetCore.App" />
comme ci-dessous fonctionne:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp3.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Hosting.Abstractions" Version="2.2.0" />
</ItemGroup>
</Project>
Je voudrais quand même garder le projet comme netstandard2.0
si possible. Peut-être que j'ai besoin d'un package NuGet spécifique pour cela?
Veuillez remplacer votre HostingEnvironment
par WebHostEnvironment
.
Comme le dit le document:
Remplacez IHostingEnvironment par IWebHostEnvironment et ajoutez une instruction using pour l'espace de noms Microsoft.Extensions.Hosting.
J'avais un problème similaire. Dans mon cas (EF 3.0), j'utilisais un projet avec Microsoft.Extensions.Hosting (3.0.1)
. C'était en utilisant une classe d'un autre projet. Ce deuxième projet comprenait Microsoft.Azure.WebJobs.Extensions (3.0.5)
. Ce package a Microsoft.Azure.WebJobs (3.0.14)
comme dépendance. Cela inclut Microsoft.Extensions.Hosting (2.1.0)
, qui était incompatible avec EF 3.0. Comprenant
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.0.1" />
dans le deuxième projet a résolu mon problème.