この記事では、.NET デスクトップ プログラムでカスタム XML 構成ファイルを使用して設定を保存および読み取りする方法について詳しく説明します。XML に加えて、JSON、INI、YAML などの他の一般的な構成ファイル形式と、それらの長所と短所、および関連する NuGet ライブラリについても説明します。最後に、構成ファイル形式として XML を選択した理由を強調し、実際の例を示します。
1. 背景
.NET デスクトップ プログラムでは、通常、プログラムの構成情報を保存するために設定ファイルが使用されます。設定ファイルの利用方法は非常に簡単で、プロジェクトに設定ファイルを追加し、Properties.Settings.Default から設定を取得して保存するだけです。
私のオープン ソース プロジェクトHackerScreenSaverでは以前この方法を使用していましたが、Windows 11 のカーネル バージョンをアップグレードしたときに、プログラムがシステムによってスクリーンセーバーとして開始されたときに、構成を読み込めないことがわかりました。
この場合、他の方法を使用して構成ファイルを保存する必要があります。結局のところ、設定ファイルは設定を保存する唯一の方法ではありません。レジストリに保存するか、構成ファイルを自分で作成して保存するかを選択できます。
2. 一般的な設定ファイル形式
一部の単純な構成では、バイナリ ファイルを直接記述することもできますが、もちろん、一般的には、JSON、INI、YAML などの一般的な形式の構成ファイルを選択します。
- JSON(JavaScript Object Notation) 格式
- 利点: 読み書きが簡単で、複雑なデータ構造をサポートし、Web API やフロントエンド開発で広く使用されています。
- 欠点: JSON 仕様によれば、コメントはサポートされていません (独立した Json ファイルは一部のエディターでコメントを正しく解析でき、.NET Core の JSON 構成プロバイダーを通じて構成を読み取るときに、構成ファイルにコメントを追加することもできます)。
- 関連クラス ライブラリ:
Newtonsoft.Json
(組み込みのものを使用することをお勧めしますSystem.Text.Json
) 移行については、関連するチュートリアルを参照してください。
- INI(初期化ファイル)
- 利点: 簡潔で、読み取りと編集が簡単で、単純なキーと値のペアの保存に適しています。
- 欠点: 複雑なデータ構造と型はサポートされません。
- 関連ライブラリ:
ini-parser
- YAML(もう一つのマークアップ言語)
- 利点: 簡潔、読みやすく、編集しやすく、複雑なデータ構造をサポートし、コメントをサポートします。
- 短所: インデントに敏感で、エラーが発生する可能性があります。
- 関連ライブラリ:
YamlDotNet
3. HackerScreenSaver の設定オプション
HackerScreenSaver の設計をコンパクトに保つために、適切さとシンプルさの原則に基づいて、最終的に他のサードパーティの導入を必要としない XML 形式の設定ファイルを選択しました。
XML (eXtensible Markup Language) には次の利点があります。
- 強力なスケーラビリティを備え、複雑なデータ構造をサポートします。
- 理解とメンテナンスを容易にするコメントをサポートします。
- 標準のデータ交換形式なので、他のシステムと簡単に統合できます。
以下は、設定を保存するために設計した単純な構成クラスですSimpleSetting
。
public class SimpleSetting
{
// 类的属性和构造函数省略...
/// <summary>
/// 从文件中读取设置
/// </summary>
/// <param name="path">配置文件路径</param>
public SimpleSetting(string path)
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(SimpleSetting));
using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open))
{
SimpleSetting ss = (SimpleSetting)xs.Deserialize(fs);
isLocal = ss.isLocal;
uInfo = ss.uInfo;
Opacity = ss.Opacity;
autoExit = ss.autoExit;
}
}
/// <summary>
/// 保存设置到文件
/// </summary>
/// <param name="path">配置文件路径</param>
public void Save(string path)
{
System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(SimpleSetting));
using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Create))
{
xs.Serialize(fs, this);
}
}
}
SimpleSetting
このクラスには、XML ファイルから設定を読み取り、XML ファイルに設定を保存するためのメソッドが含まれています。このクラスを使用するには、プログラム内でオブジェクトを作成しSimpleSetting
、そのオブジェクトSave
とLoad
メソッドを呼び出すだけです。このようにして、カスタム XML 構成ファイルを使用して、.NET デスクトップ プログラムに設定を保存できます。
4. 最後に
この記事では、.NET デスクトップ プログラムでカスタム XML 構成ファイルを使用する方法と、構成ファイル形式として XML が選択される理由について詳しく説明します。また、JSON、INI、YAML などの他の一般的な構成ファイル形式と、その長所と短所、および関連する NuGet ライブラリについても調査しました。この記事が、プロジェクトのニーズに適した構成ファイル ソリューションを見つけるのに役立つことを願っています。