先日書いた問題の原因が分かった(たぶん)

プロジェクトのプロパティをいじったら未入力チェックがかからなくなった

Visual Studio 2022でやってたんだけど、プロジェクトのプロパティで「ビルド」→「全般」にある「Null許容」が「有効化」になってると先日書いたような挙動をするようだ。

f:id:yagiey:20211204141827p:plain
プロジェクトのプロパティ

プロジェクトファイルとしては、Nullable要素がそれにあたるらしい。

<Project Sdk="Microsoft.NET.Sdk.Web">

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

  <ItemGroup>
    <PackageReference Include="System.Data.SqlClient" Version="4.8.3" />
  </ItemGroup>

</Project>

「<Nullable>enable</Nullable>」の行を削除して実行すると、以下のようになった。

f:id:yagiey:20211204144012p:plain
値型のプロパティだけに必須チェックがかかった

自分が知ってるNull許容型といえば、int?とかの Nullable<T> where T : struct なジェネリッククラスだけど、なぜその設定が今回の問題に関係あるのか意味が分からない。
でも勉強の糸口を見つけたので大きな前進!

VS2019とVS2022での生成されるプロジェクトの違い

僕のPCには、VS2019とVS2022が入ってて、2022ではMVCのプロジェクトを新規作成したときには以下のようなプロジェクトファイルが生成される。

<Project Sdk="Microsoft.NET.Sdk.Web">

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

</Project>

一方で、2019で同じくMVCのプロジェクトを新規作成したときは

<Project Sdk="Microsoft.NET.Sdk.Web">

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

</Project>

というプロジェクトファイルが生成される。んで、これに対応するプロジェクトのプロパティ画面は以下。

f:id:yagiey:20211204143227p:plain
プロジェクトのプロパティ(VS2019)