デフォルトのapp.configを動的に変更します
問題の説明:
動的にロードされたアプリケーションモジュールから新しいメモリApp.configに動的にロードできるソリューションを開発し、デフォルトのアプリをカバーせずに、アプリケーションが変更された構成に透過的であることを確認します。
解決策:関連する問題は、メソッドを使用して構成システムパスを変更することをお勧めしますが、これは、構成システムが最初に最初に使用される場合にのみ有効です。この問題を完全に解決するには、キャッシュ構成値もクリアする必要があります。
実装:SetData
の使用方法:
app.configの特定の範囲を一時的に変更するには:
<code class="language-csharp">using System; using System.Configuration; using System.Linq; using System.Reflection; public abstract class AppConfig : IDisposable { public static AppConfig Change(string path) { return new ChangeAppConfig(path); } public abstract void Dispose(); private class ChangeAppConfig : AppConfig { private readonly string oldConfig = AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString(); private bool disposedValue; public ChangeAppConfig(string path) { AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); ResetConfigMechanism(); } public override void Dispose() { if (!disposedValue) { AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", oldConfig); ResetConfigMechanism(); disposedValue = true; } GC.SuppressFinalize(this); } private static void ResetConfigMechanism() { typeof(ConfigurationManager) .GetField("s_initState", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, 0); typeof(ConfigurationManager) .GetField("s_configSystem", BindingFlags.NonPublic | BindingFlags.Static) .SetValue(null, null); 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を動的に変更する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。