Visual Studio 2022 で ASP.NET Core プロジェクトを新規作成すると startup.cs ファイルが生成されない - Visual Studio

Visual Studio 2022 で ASP.NET Core プロジェクトを新規作成すると startup.cs ファイルが生成されない動作について紹介します。

概要

Visual Studio 2022でASP.NET Core プロジェクトを新規作成すると、従来のProgram.csファイルと大きく異なる Program.csファイルが生成され、Startup.cs ファイルが生成されない動作になります。

従来の Program.cs Startup.cs ファイル

従来のVisual StudioでASP.NET Core アプリケーションを作成すると、以下の Program.cs Startup.cs が生成されます。
Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace FirstWebApp
{
  public class Program
  {
    public static void Main(string[] args)
    {
      CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>();
  }
}
Startup.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace FirstWebApp
{
  public class Startup
  {
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
      if (env.IsDevelopment())
      {
        app.UseDeveloperExceptionPage();
      }

      app.Run(async (context) =>
      {
        await context.Response.WriteAsync("Hello World!");
      });
    }
  }
}

Visual Studio 2022 での Program.cs ファイル

Visual Studio 2022でASP.NET Core 6.0 アプリケーションを作成すると、以下のProgram.csファイルが生成されます。Startup.csファイルは作成されません。
Program.cs
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

Visual Studio 2022で ASP.NET Core 5 のアプリケーションを作成した場合に生成されるファイル

Visual Studio 2022で ASP.NET Core 5 の空のアプリケーションを作成した場合に生成される、Startup.cs Program.cs ファイルは次の通りです。
Program.cs
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace BlankAppAspNetCore5vs2022
{
  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>();
            });
  }
}
Startup.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace BlankAppAspNetCore5vs2022
{
  public class Startup
  {
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
      if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
      }

      app.UseRouting();

      app.UseEndpoints(endpoints =>
      {
        endpoints.MapGet("/", async context =>
              {
            await context.Response.WriteAsync("Hello World!");
          });
      });
    }
  }
}

対処法

Program.cs ファイルの書式が変わったり、Startup.csファイルが作成されなくなる仕様への対応方法は以下があります。

新しい Program.cs ファイルを利用する

新しい形式のProgram.csファイルの利用が推奨されているため、新しい形式に変更する方法がおすすめです。

ASP.NET 6 アプリケーションで従来のProgram.csファイルを利用する

ASP.NET 6 アプリケーションでも従来の初期のProgram.cs starup.cs ファイルを利用できます。 プロジェクト作成後に従来の書式のコードに変更ができます。
自動での切り替えはできないため、手動でファイルを作成してコードを記述やコピーペーストして変更する必要があります。

ASP.NET 5 でアプリケーションを新規作成後に、ターゲットフレームワークを ASP.NET 6 に変更する

ASP.NET 5 でアプリケーションを新規作成すると、従来のstaratup.cs Program.cs ファイルが生成されますので、 その後、ターゲットフレームワークを ASP.NET 6 に変更する方法もあります。

参考:RazorPagesを利用する場合

新しいProgram.cs ファイルでRazorPagesを利用する場合は次の書式になります。
Program.cs
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();

var app = builder.Build();

if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

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

app.UseRouting();

app.UseAuthorization();

app.MapRazorPages();

app.Run();

最小限のコンパクトなRazorPagesへのルーティングを実装する場合は以下のコードで動作します。
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();

var app = builder.Build();

app.UseRouting();
app.MapRazorPages();

app.Run();
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2023-03-06
作成日: 2021-10-26
iPentec all rights reserverd.