Rumah > pembangunan bahagian belakang > C++ > Bagaimana cara mengubahsuai app.config secara dinamik pada masa runtime?

Bagaimana cara mengubahsuai app.config secara dinamik pada masa runtime?

Mary-Kate Olsen
Lepaskan: 2025-01-25 17:28:11
asal
912 orang telah melayarinya

How to Dynamically Modify the Default app.config at Runtime?

Ubah suai app.config lalai secara dinamik semasa masa jalan

Penerangan masalah:

Bangunkan penyelesaian yang memuatkan bahagian konfigurasi secara dinamik daripada modul aplikasi yang dimuatkan secara dinamik ke dalam app.config dalam memori baharu, memastikan aplikasi menggunakan konfigurasi yang diubah suai secara telus tanpa menulis ganti konfigurasi lalai.

Penyelesaian:

Soalan berkaitan mencadangkan menggunakan kaedah SetData untuk menukar laluan sistem konfigurasi, tetapi ini hanya berkesan apabila dilaksanakan sebelum sistem konfigurasi digunakan buat kali pertama. Untuk menyelesaikan isu ini sepenuhnya, nilai konfigurasi cache juga perlu dikosongkan.

Pelaksanaan:

Kod berikut menunjukkan cara untuk mencapai tingkah laku yang diingini:

<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>
Salin selepas log masuk

Penggunaan:

Untuk mengubah suai app.config buat sementara waktu untuk skop tertentu:

<code class="language-csharp">using (AppConfig.Change(tempFileName))
{
    // 应用程序使用修改后的 app.config
}</code>
Salin selepas log masuk

Untuk menukar app.config secara kekal untuk keseluruhan masa jalan:

<code class="language-csharp">// 应用程序使用修改后的 app.config
AppConfig.Change(tempFileName);</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana cara mengubahsuai app.config secara dinamik pada masa runtime?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan