ConfigurationManager は Save() で XML コメントを保持できますか? 質問する

ConfigurationManager は Save() で XML コメントを保持できますか? 質問する

別のアプリケーションの App.config ファイルの簡単な AppSetting を変更し、その変更を保存できる小さなユーティリティを作成しました。

 //save a backup copy first.
 var cfg = ConfigurationManager.OpenExeConfiguration(pathToExeFile);
 cfg.SaveAs(cfg.FilePath + "." + DateTime.Now.ToFileTime() + ".bak"); 

 //reopen the original config again and update it.
 cfg = ConfigurationManager.OpenExeConfiguration(pathToExeFile);
 var setting = cfg.AppSettings.Settings[keyName];
 setting.Value = newValue;

 //save the changed configuration.
 cfg.Save(ConfigurationSaveMode.Full); 

これは、1 つの副作用を除けば、うまく機能します。新しく保存された .config ファイルでは、元の XML コメントがすべて失われますが、失われるのは AppSettings 領域内のみです。元の構成ファイルの AppSettings 領域から XML コメントを保持することは可能ですか?

すぐにコンパイルして実行したい場合は、完全なソースの pastebin がここにあります。

ベストアンサー1

Reflector.Net にアクセスして、このクラスの逆コンパイルされたソースを確認しました。簡単に答えると、いいえ、コメントは保持されません。Microsoft がクラスを記述した方法は、構成クラスのプロパティから XML ドキュメントを生成するというものです。コメントは構成クラスに表示されないため、XML には反映されません。

さらに悪いことに、Microsoft はこれらすべてのクラスを封印しているため、新しいクラスを派生させて独自の実装を挿入することはできません。唯一の選択肢は、コメントを AppSettings セクションの外に移動するか、代わりにクラスを使用してXmlDocument構成XDocumentファイルを解析することです。

申し訳ありません。これは、Microsoft が想定していなかった特殊なケースです。

おすすめ記事