任意の XML に基づいて System.Configuration.Configuration インスタンスを取得する方法はありますか?
-
09-06-2019 - |
質問
作成したカスタム ConfigurationSection を単体テストしようとしていますが、任意の構成 XML を システム.構成.構成 (テスト構成 XML を Tests.dll.config ファイルに置くのではなく) テストごとに。つまり、次のようなことをしたいのです。
Configuration testConfig = new Configuration("<?xml version=\"1.0\"?><configuration>...</configuration>");
MyCustomConfigSection section = testConfig.GetSection("mycustomconfigsection");
Assert.That(section != null);
ただし、次のようです 構成マネージャー EXE ファイルまたはマシン構成に関連付けられた構成インスタンスのみが提供されます。任意の XML を Configuration インスタンスにロードする方法はありますか?
解決
実は私が発見した方法があります...
次のように、元の構成セクションから継承する新しいクラスを定義する必要があります。
public class MyXmlCustomConfigSection : MyCustomConfigSection
{
public MyXmlCustomConfigSection (string configXml)
{
XmlTextReader reader = new XmlTextReader(new StringReader(configXml));
DeserializeSection(reader);
}
}
次に、次のように ConfigurationSection オブジェクトをインスタンス化できます。
string configXml = "<?xml version=\"1.0\"?><configuration>...</configuration>";
MyCustomConfigSection config = new MyXmlCustomConfigSection(configXml);
誰かの役に立てば幸いです:-)
他のヒント
あなたが探しているのはConfigurationManagerだと思います。OpenMappedExeConfiguration
これを使用すると、ファイル パス ( ExeConfigurationFileMap)
他の投稿者の言うことが真実で、テスト用にまったく新しい XML ファイルを作成したくない場合は、設定の編集内容を Test メソッド自体に入れてから、新しく変更した設定に対してテストを実行することをお勧めします。データ。
クラスのメンバーを見ると、答えはおそらくノー*だと思います。独自の XML 構成ファイルを作成せずに、なぜこれを行う必要があるのかわかりません。
*いいえ、厄介なリフレクション ハックを除いて
所属していません StackOverflow