Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

652
Views
Cómo ejecutar la aplicación .NET Core Console usando un generador de host genérico

Estoy tratando de descubrir cómo usar el patrón de hostbuilder para ejecutar una aplicación de consola (no un servicio de Windows). La intención es mantener el flujo similar a un WebApi para mantener las prácticas de desarrollo similares. He visto muestras para usar HostedService o BackGroundService, donde quieren ejecutarlo como un servicio de Windows. Pero si estoy buscando ejecutar una aplicación de consola simple, ¿dónde especifico mi clase y método de punto de entrada? Desde hostbuilder.Build(), puedo ver los métodos Run() y RunAsync(). Pero no puedo averiguar qué ejecutará.

He visto otros ejemplos de dónde puede crear una colección de servicios y luego usar serviceprovider.GetService().SomeMethod() para iniciar el proceso. Pero eso se desvía de lo que queremos hacer. Entonces, sugiera cómo especificar el proceso de inicio. Estamos usando 3.1 .Net Core.

 class Program { static async void Main(string[] args) { var host = CreateHostBuilder(args).Build(); await host.RunAsync(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostBuilderContext, serviceCollection) => new Startup(hostBuilderContext.Configuration).ConfigureServices(serviceCollection)) .UseSerilog() ; }
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

EDITAR: la actualización de .NET 6 está debajo ↓


Comenzaría con la plantilla de worker predeterminada. Viene con los paquetes necesarios preinstalados. Si ya tiene un proyecto, instale el paquete Microsoft.Extensions.Hosting .

 dotnet new worker -n MyCli

Luego abra Program.cs y cree el host. Elimine el servicio alojado de Worker si no quiere ir con la ruta del servicio alojado.

 public class Program { public static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { // remove the hosted service // services.AddHostedService<Worker>(); // register your services here. }); }

Construye tu lógica:

 internal class MyService { // you can also inject other services private ILogger<MyService> _logger; public MyService(ILogger<MyService> logger) { _logger = logger; } public void DoSomething() { _logger.LogInformation("Doing something"); } }

Luego registre la clase dentro del método .ConfigureServices

 Host.CreateDefaultBuilder(args) .ConfigureServices((hostContext, services) => { services.AddTransient<MyService>(); });

Ahora puede resolverlo y llamarlo dentro del método Main :

 public static void Main(string[] args) { var host = CreateHostBuilder(args).Build(); var myService = host.Services.GetRequiredService<MyService>(); myService.DoSomething(); }

Actualización de .NET 6

Con .NET 6, el modelo estándar se reduce significativamente. Podemos reescribir nuestro Program.cs como:

 var host = Host.CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddTransient<MyService>(); }) .Build(); var my = host.Services.GetRequiredService<MyService>(); await my.ExecuteAsync(); class MyService { private readonly ILogger<MyService> _logger; public MyService(ILogger<MyService> logger) { _logger = logger; } public async Task ExecuteAsync(CancellationToken stoppingToken = default) { _logger.LogInformation("Doing something"); } }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!