'Why is Program.cs no longer a class?

When you create a new application with the latest .NET Framework, Program.cs looks as follows:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

If you're wondering - this is literally the entire file. No public class Program; no includes; no constructors. Back in "the day" this all used to be included within a Main function of a class called Program, like so:

public class Program
{
    public async static Task Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();

        ...

        await host.RunAsync();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder => 
                webBuilder.UseStartup<Startup>());
}

So why the change to this scripting style format with no class definition for Program.cs?



Solution 1:[1]

Actually, it doesn't happen in .NET framework. This new syntax was released with .NET 6 and C# 9. It's called top-level statements and aims to enable you to start coding quickly, excluding the need to include repetitive ceremonial code. It's not very useful, this feature only simplifies what's needed to start coding.

Docs with more details: https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/tutorials/top-level-statements

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1