C# - GetEncodingなどでshift_jisを指定すると例外が発生する

.NET(Core系)は デフォルトで shift-jis(sjis) に対応したエンコーディングプロバイダーが登録されていません。Encoding.RegisterProvider メソッドで明示的に登録する必要があります。

実行時エラーが発生している様子
実行時エラーが発生している様子
System.ArgumentException
  HResult=0x80070057
  Message='Shift_JIS' is not a supported encoding name. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method. Arg_ParamName_Name
  Source=System.Private.CoreLib
  スタック トレース:
   場所 System.Text.EncodingTable.InternalGetCodePageFromName(String name)
   場所 System.Text.EncodingTable.GetCodePageFromName(String name)
   場所 System.Text.Encoding.GetEncoding(String name)
   場所 Program.<Main>$(String[] args) (D:\dev2\curict\content\item\dotNET-Core\data\dotNET5-sjis\ConsoleCSharp2022-dotNet6.zip\ConsoleApp\Program.cs):行 12

shift-jis(sjis) を使用できるようにする方法

Encoding.RegisterProvider メソッドを使用し、CodePagesEncodingProvider を登録します。
using System.Text;

// コードページ エンコーディング プロバイダーを登録
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

サンプルコード

次のコードを実行すると 例外「System.ArgumentException」が発生します。
using System.Text;

Encoding shiftJisEncoding = Encoding.GetEncoding("Shift_JIS");

次のコードはプロバイダー登録をしているため、エラーが発生しません。

using System.Text;

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding shiftJisEncoding = Encoding.GetEncoding("Shift_JIS");

プロバイダー登録が必要か、判別する方法

プロジェクトのプロパティから、ターゲットフレームワークを確認します。登録が必要なのはターゲットフレームワークが「.Net Core 1.0 ~ .Net Core 3.1」と、「.NET 5 ~ 」のプロジェクトです。「.NET Framework 1.0 ~ .NET Framework 4.8」では必要ありません。
プロジェクトのプロパティ(.NET Core系)
プロジェクトのプロパティ(.NET Core系)
プロジェクトのプロパティ(.NET Framework系)
プロジェクトのプロパティ(.NET Framework系)

参考資料

検証環境