ASP.NET CoreアプリケーションのProgram.cs を新しい形式に変更するとビルドエラーが発生する - ASP.NET Core

ASP.NET CoreアプリケーションのProgram.cs を新しい形式に変更してビルドすると、ビルドエラーが発生する現象について紹介します。

現象の確認

ASP.NET Coreアプリケーションで旧形式のProgram.cs を新しい Program.cs に変更します。
Program.cs (旧形式)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace SimpleBlazorPages
{
  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>();
            });
  }
}
Program.cs (新形式)
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
var app = builder.Build();

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

新しい形式に変更してビルドすると、以下のエラーが発生します。
エラーメッセージ
CS0103:現在のコンテキストに 'WebApplication' という名前は存在しません

原因

Microsoft.AspNetCore.Builder 名前空間の WebApplication クラスの参照ができないため、ビルドエラーが発生します。
.NET 6を選択してASP.NET Core Webアプリケーションをテンプレートから作成した場合は、暗黙で Microsoft.AspNetCore.Builder がusingされるため、 ビルドエラーは発生しません。

対処法

新しい形式の Program.cs に変更した場合は、プロジェクトファイルのXMLを修正します。
以下の記述をPropertyGroupタグ内に記述します。
<ImplicitUsings>enable</ImplicitUsings>
プロジェクトファイル (変更前)
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

</Project>

PropertyGroup タグ内に ImplicitUsings タグを記述し、enable を指定します。
プロジェクトファイル (変更後)
<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>

プロジェクトファイル変更後にビルドするとビルドエラーが発生せずにビルドできます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-07-21
作成日: 2022-07-20
iPentec all rights reserverd.