実行時にデフォルトの App.config を動的に変更します
構成アイテムを必要とするモジュールを動的にロードするには、メモリ内に新しい app.config を作成し、モジュールのさまざまなセクションを統合して、デフォルトの app.config を上書きせずにアプリケーションで使用できるようにする方法が必要です。
この問題については、質問で提案されているものと同様の解決策が見つかりました。ただし、提供されたコードでは期待どおりの結果が得られません。リンクされた質問で説明されている方法は、最初に使用するためにシステムを構成する前に実行した場合にのみ機能します。 ClientConfigPaths クラスのキャッシュされた値により、最初の使用後に新しい構成を読み取ることができなくなります。
したがって、このソリューションでは、これらのキャッシュされた値も削除されます。次のコードはこのタスクを実現します:
<code class="language-csharp">public abstract class AppConfig : IDisposable { // ... } private class ChangeAppConfig : AppConfig { // ... private static void ResetConfigMechanism() { // ... typeof(ConfigurationManager) .Assembly.GetTypes() .Where(x => x.FullName == "System.Configuration.ClientConfigPaths") .First() .GetField("s_current", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, null); } }</code>
このコードでは、アプリケーションの実行時に新しい app.config が読み取られて使用されます。デフォルトの app.config は、AppConfig インスタンスを解放することで復元できます。永続的な変更が必要な場合は、AppConfig.Change メソッドを使用せずに、アプリケーションの先頭に配置して変更を実行できます。
以上がデフォルトを上書きせずに実行時に app.config を動的に変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。