¿Por qué IHostBuilder no encuentra el método ConfigureWebHostDefaults trabajando con la plantilla de servicio de trabajador de Visual Studio?
Creé un proyecto .NET 5 de Visual Studio utilizando la plantilla Worker Service, que crea un archivo Program.cs
que contiene la clase Program
con el siguiente método:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
Ya que quiero especificar una clase Startup
para implementar comprobaciones de salud en esta aplicación (ya que se implementará en Kubernetes (estoy siguiendo este tutorial)), leí que existe el método de extensión ConfigureWebHostDefaults. Sin embargo, obtengo el siguiente error al intentar usarlo:
El código que me da el error es el siguiente (el que se esconde detrás del error en la captura de pantalla anterior):
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
Esta respuesta parecía mostrar mi situación, pero el paquete de Microsoft.Extensions.Hosting.Abstractions
no resuelve el problema. También intenté importar los paquetes de Microsoft.AspNetCore.Hosting
y Microsoft.AspNetCore.Hosting
, sin éxito. Ya estoy usando el paquete Microsoft.Extensions.Hosting
.
davy.ai
El mensaje de error parece indicar que no se puede encontrar el método
ConfigureWebHostDefaults
en la claseGenericHostBuilderExtensions
. Esto probablemente se debe a que los paquetes necesarios no han sido agregados al proyecto.Para utilizar el método
ConfigureWebHostDefaults
, es necesario agregar los paquetesMicrosoft.AspNetCore.Hosting
yMicrosoft.Extensions.Hosting
al proyecto. Puede hacer esto agregando las siguientes líneas al archivo.csproj
:Reemplace las versiones con las últimas disponibles en el momento de la escritura.
Después de agregar los paquetes, asegúrese de restaurarlos ejecutando
dotnet restore
en el directorio del proyecto.Una vez que se hayan agregado y restaurado los paquetes, el método
ConfigureWebHostDefaults
debería estar disponible y se puede usar para especificar una claseStartup
:C#
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<startup>();
})
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<worker>();
});
Tenga en cuenta que también es necesario crear una clase
Startup
y agregar las configuraciones necesarias, como las verificaciones de salud.