UfcppSample icon indicating copy to clipboard operation
UfcppSample copied to clipboard

LangVersion の話が変

Open ufcpp opened this issue 3 weeks ago • 2 comments

https://ufcpp.net/study/csharp/cheatsheet/langversionoption/ の記述が変:

  • msbuild の <LangVersion> 省略と <LangVersion>default</LangVersion> が違うという話がない
    • 前者は TargetFramework からの自動指定
      • Roslyn のレイヤーには csc /LangVersion:13 みたいなのが具体的な数字が渡ってるはず
    • 後者は Roslyn に /LangVersion:default が渡る
      • これは今だと /LangVersion:latest と同じになるはず?確か
  • Roslyn 側は Roslyn 側で、defaultlatestMajor から latest に変わった or 変えるみたいな話と混同してそう
    • Visual Stduio 2017 時代(C# 7.x の頃)は 7.1 世代でも 7.2 世代でも明示的に latest 指定しないと C# 7.0 で止まってたはず

もう経緯も覚えてないし、今現在だけの話にして、「古い挙動」は消した方がよさそう?

ただ、msbuild (dotnet build とかで csproj を読ませたときの挙動)から説明しないと、<LangVersion> 省略と <LangVersion>default</LangVersion> の挙動差に合理的な説明できない。

ufcpp avatar Nov 06 '25 03:11 ufcpp

同様の理由でもう https://ufcpp.net/study/csharp/cheatsheet/ap_ver8/ の冒頭の「補足」は消す。

ufcpp avatar Nov 06 '25 03:11 ufcpp

ついで? ちょっと前に discord に投稿したやつコピペ:

  • TargetFrameworks で net9.0;netstandard2.0 とかだとバージョン指定入れておかないと割と困ったり。
  • default と未指定が違うのは、msbuild のデフォルトと roslyn のデフォルトが違うから…
  • First-class Span みたいなやべーやつが来ると「13固定」とかの需要が多少…
  • latest は「手元だとうっかり .NET 10 SDK 入れちゃってて意図せず14になっちゃった。GitHub Actionコケる」が普通に起こり。
  • 昔は msbuild 側のデフォルトも latestMajor だったはずだけど、破壊的変更耐性低いからやめようとなっており、今はもうむしろ latest/latestMajor は非推奨という姿勢のはず。
  • field キーワードみたいな「C# 14 でキーワードになってるから LangVersion/TargetFramework 上げる前に変更しておいてね」警告を出す(.NET 10 SDK で TargetFramework net9.0 とか LangVersion 13 だとこの警告出せる)ために latest やめたはず。
  • 「人柱は黙って LangVersion preview」でいいので latest の存在意義あんまりなかったり…
  • 昔は「csproj 1個1個に LangVersion 入れるのしんどいわ。てか、毎年 grep LangVersion するのだるいわ」だったけど、今はまあ、Directory.build.props に1行書くだけなので…

※ ちょっと修正:

「C# 14 でキーワードになってるから LangVersion/TargetFramework 上げる前に変更しておいてね」警告は、 実際には「警告出す」じゃなくて「Analyzer でサジェスト → 自動 fix を提供」かも。

「昔は msbuild 側のデフォルトも latestMajor だったはず」も不正確で、「昔は msbuild 側では特殊なことせず roslyn への素通ししかしてない & その場合の roslyn 側 default が latestMajor だった」かな。

ufcpp avatar Nov 06 '25 03:11 ufcpp

大幅改変して直した。 というかほぼ書き直した。

ufcpp avatar Nov 23 '25 07:11 ufcpp