System.Text.Encoding 型のプロパティを持つコンポーネントをフォームにデプロイすると、ビルドが失敗する可能性があります

この記事は、型 System.Text.Encoding のプロパティを持つコンポーネントをフォームにデプロイするときにビルドが失敗する問題を解決するのに役立ちます。

元の製品バージョン: .NET Framework 4.5
元の KB 番号: 2956445

現象

.NET Framework 4.5 がインストールされている Microsoft Visual Studio 開発環境では、型System.Text.Encodingのプロパティを持つコンポーネントをフォームに展開すると、ビルドが失敗する可能性があります。

これは、.NET Framework 4.5 がインストールされている環境で Visual Studio 2010 または Visual Studio 2012 が実行されている場合に発生する可能性があります。

.NET Framework 4.5.1 がインストールされている環境や、Visual Studio 2013が実行されている環境では発生しません。

エラー メッセージの例を次に示します。

ResX ファイルが無効です。138 行目の 5 桁目のデータに型を入力すると、構築中に次の例外がスローされたため、読み込むことができません。エンコード 932 に使用できるデータはありません。

原因

これは、ビルド プロセスのオブジェクトとしてリソース ファイルから型 System.Text.Encoding のプロパティを逆シリアル化中にエラーが発生したためです。

このエラーが発生すると、オブジェクトを Windows フォーム デザイナーに読み込めなかったため、ビルドは失敗します。

状態

Microsoft はバグであることを確認しました。 この問題は、Windows 8とWindows Server 2012.NET Framework 4.5 で修正されました。

解決方法

Windows 8とWindows Server 2012を使用する場合は、次のサポート技術情報の記事の Microsoft カスタマー サポート サービスに問い合わせて、Windows 8とWindows Server 2012用の Framework 4.5 の修正プログラムを入手してください。
修正プログラム ロールアップ 2848799は、Windows 8 および Windows Server 2012 の .NET Framework 4.5 で使用できます (2848799)

Windows 8とWindows Server 2012を使用しない場合は、.NET Framework 4.5.1 をインストールします。

.NET Framework 4.5.1 には言語パックがあります。 必要に応じて、対応する言語パックをインストールします。

動作を再現する手順

  1. 新しい Windows フォーム アプリケーションを作成します。

  2. ユーザー コントロール (UserControl1) をプロジェクトに追加します。

  3. ユーザー コントロール クラスのコードを次のコードに置き換えます。

    public UserControl1()
    {
        InitializeComponent();
        Encoding = Encoding.GetEncoding(932);
    }
    public Encoding Encoding { get; set; }
    
  4. ソリューションをビルドします。

  5. フォームのデザイン ビューのツールボックスから、上で説明したコントロールをダブルクリックしてフォームに配置します。

  6. ソリューションをリビルドします。