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 が生成されます。
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>();
}
}
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ファイルは作成されません。
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 ファイルは次の通りです。
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>();
});
}
}
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を利用する場合は次の書式になります。
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