File: Program.cs
Web Access
Project: src\src\Hosting\test\testassets\Microsoft.AspNetCore.Hosting.TestSites\Microsoft.AspNetCore.Hosting.TestSites.csproj (Microsoft.AspNetCore.Hosting.TestSites)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Console;
 
namespace ServerComparison.TestSites;
 
public static class Program
{
    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .AddCommandLine(args)
            .AddEnvironmentVariables(prefix: "ASPNETCORE_")
            .Build();
 
        var builder = new WebHostBuilder()
            .UseServer(new NoopServer())
            .UseConfiguration(config)
            .SuppressStatusMessages(true)
            .ConfigureLogging((_, factory) =>
            {
                factory.AddConsole();
                factory.AddFilter<ConsoleLoggerProvider>(level => level >= LogLevel.Warning);
            })
            .UseStartup("Microsoft.AspNetCore.Hosting.TestSites");
 
        if (config["STARTMECHANIC"] == "Run")
        {
            var host = builder.Build();
 
            host.Run();
        }
        else if (config["STARTMECHANIC"] == "WaitForShutdown")
        {
            using (var host = builder.Build())
            {
                host.Start();
 
                host.WaitForShutdown();
            }
        }
        else
        {
            throw new InvalidOperationException("Starting mechanic not specified");
        }
    }
}
 
public class NoopServer : IServer
{
    public void Dispose()
    {
    }
 
    public IFeatureCollection Features { get; } = new FeatureCollection();
 
    public Task StartAsync<TContext>(IHttpApplication<TContext> application, CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }
 
    public Task StopAsync(CancellationToken cancellationToken)
    {
        return Task.CompletedTask;
    }
}