なべひろBlog

プログラミングをメインに仕事に関するアレコレを発信しています。

.NET Frameworkから.NET Core 3xに移行したら出た例外 StreamWriter編

最近やっと.NETCore 3.1のアプリをデバッグし始めました。

しかし、いきなり実績のあった処理で例外が出て戸惑ってしまいました。

これからも色々出ると思うので備忘録として残していきます。

今回の事象はStreamWriterでの例外です。

こんなプログラムを作って(まあ昔作ったコードのコピペですが...)

using (FileStream fs = new FileStream($"{AppDomain.CurrentDomain.BaseDirectory}Log.txt", FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
using (StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("shift-jis")))
{
// 中身は省略
}

で「StreamWriter」でArgumentExceptionの例外が出ました。

今までWinFormsではコードさえ間違えなければ普通に動くプログラムです。

それが突然動かなくなれば当然プチパニックですよw

WPFの経験も浅いのでWPFの問題かと思い検索しましたがヒットせず。

アレコレ探しているうちに見つけたのが以下の対策です。

1. NuGetでSystem.Text.Encoding.CodePagesをインストール

2. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);を追記

試しにModelのコンストラクタに記述して別メソッドでStreamWriterを実行しましたが例外は発生しません。

WinFormsやWPFで.NET Coreが使えるようになると多くのプログラマが.NET Codeの世界にやってくるかと思いますが、こういった情報は多くあるようにしたいですね。