Visual Studioでエラーが出て保存できない問題 (対処法メモ)

Visual Studio で Windows用ソフトを制作していた時、ユーザーフォーム編集後に保存ボタンを押したら謎のエラーが出て保存ができなかったので困ったのでその時の対処法をメモしました。

症状

編集したフォームやソースコードが保存できない

フォームデザイナでフォーム編集後に保存をかけようとCtrl+Sしたら、なぜか以下のようなエラーが表示されました。

Visual Studioで保存時に表示されたエラーメッセージ「致命的なエラーです。 (HRESULT からの例外:0x8000FFFF (E_UNEXPECTED))」

致命的なエラーです。 (HRESULT からの例外:0x8000FFFF (E_UNEXPECTED))

致命的って何…。(超怖い)

何回保存ボタンを押しても同じエラーメッセージが表示されて保存ができない…。

エラーが起きる前の状態まで戻るボタンで編集を戻してもエラーは解消されませんでした。

※OKボタンを押しても保存はできませんが、勝手にVisual Studioが強制終了することはないのでコード退避など対処はできます。

 

(フォームデザイナの挙動がおかしい)

私の環境で同時に発生していた不具合です。

フォームデザイナーでフォームにボタンとテキストボックスを配置後、ボタンをダブルクリックしてクリックイベントのコードを生成させようとさせたところなぜかコード画面に遷移しませんでした。

手動でフォームのコードに移りましたが、イベントのコードが生成されていません。

(何かVisual Studioの挙動がおかしいと思って、とりあえず保存だけして起動し直そうかなと思ったところで上記のエラーメッセージが表示され途方に暮れていました…。)

 

対処法

手動でコードをメモ帳など別の場所にコピペ退避

Visual Studio 再起動

なぜか直る

とりあえず、まずは変更を入れたコードを全て手動で別の場所に退避させておきます。(後で復旧させる用)

そして、Visual Studio の開いている全てのウィンドウを閉じます。

閉じる時に「以下の項目への変更を保存しますか?」というウィンドウが表示されますが、ここで上書き保存を選んでも結局先ほどのエラーメッセージが表示されてしまうので保存できません。

「保存しない」を選択します。

(この後、確か1ファイルごとの保存ウィンドウが出てきてそこでは「保存」が押せた気がします…! 万が一ファイルが破損していてそれを保存してしまったら嫌だな~って思って保存しないつもりでしたが、私は間違えてその時「保存」を押してしまいました。)

全てのウィンドウを閉じた後にエラーが発生したソリューションファイルを開いたら、特に問題なく起動して保存ボタンも普通に押せました。

それ以降、エラーが発生したこのプロジェクトファイルでは何も不具合が起きないままです。(原因不明だけどとりあえず直ってよかった)

 

原因 (不明)

私の環境では…

Visual Studio Community 2022 (バージョン 17.2.3) を使用していました。

C#でWindows フォームアプリ(.NET 6.0) を作成していた時のことです。

エラーが発生する前までに何回も保存を行っていましたが、特に問題はありませんでした。

フォーム編集直前、初めてのリリースビルド(≠デバッグビルド)を行いました。(ビルド自体は成功していた)

ビルド直後、フォームを編集してボタンのイベントハンドラを追加しようとしたところでVisual Studioの挙動がおかしいことに気づき、保存をかけようとしたら「致命的なエラーです。 (HRESULT からの例外:0x8000FFFF (E_UNEXPECTED))」が表示されたという流れです。

ちなみにこの時、Visual Studio 2022 のウィンドウは2つ開いていました。(異なるプロジェクト。もう片方は編集しておらずエラー発生状況不明。)

 

エラー報告例によると

以下のフォーラムで同じエラーの報告が複数ありました。

リンク:Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) in visual studio

Visual Studioの再起動だけでは直らない事例もあるようで、どうやら同じエラーメッセージでも原因は一つでは無いようです…。

  • ソリューション設定でデバッグからリリースに変更後に発生 (私と同様)
  • リリースからデバッグに戻した時点で発生
  • 再起動しても直らず。フォームの .ico ファイルを変更した後にデバッグ→リリース→デバッグと変更して当問題が発生。
    .resx ファイルが異常だったらしく、一度 .resx ファイルを削除して再生成させたら直った
記事化前の最新情報はこちらで先にツイートしています。サイト更新告知もこちら。