Different application settings depending on configuration mode

后端 未结 6 1888
生来不讨喜
生来不讨喜 2020-12-08 05:15

Is anyone aware of a way that I can set application (or user) level settings in a .Net application that are conditional on the applications current development mode? IE: Deb

6条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-08 05:56

    If you want to keep everything in one configuration file you can introduce a custom configuration section to your app.settings to store properties for debug and release modes.

    You can either persist the object in your app that stores dev mode specific settings or override an existing appsetting based on the debug switch.

    Here is a brief console app example (DevModeDependencyTest):

    App.config :

    
    
      
        
          

    The object to store your custom configuration (DevModeSettings.cs):

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace DevModeDependencyTest
    {
        public class DevModeSetting : ConfigurationSection
        {
            public override bool IsReadOnly()
            {
                return false;
            }
    
            [ConfigurationProperty("webServiceUrl", IsRequired = false)]
            public string WebServiceUrl
            {
                get
                {
                    return (string)this["webServiceUrl"];
                }
                set
                {
                    this["webServiceUrl"] = value;
                }
            }
        }
    }
    

    A handler to access your custom configuration settings (DevModeSettingsHandler.cs) :

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace DevModeDependencyTest
    {
        public class DevModeSettingsHandler
        {
            public static DevModeSetting GetDevModeSetting()
            {
                return GetDevModeSetting("debug");
            }
    
            public static DevModeSetting GetDevModeSetting(string devMode)
            {
                string section = "DevModeSettings/" + devMode;
    
                ConfigurationManager.RefreshSection(section); // This must be done to flush out previous overrides
                DevModeSetting config = (DevModeSetting)ConfigurationManager.GetSection(section);
    
                if (config != null)
                {
                    // Perform validation etc...
                }
                else
                {
                    throw new ConfigurationErrorsException("oops!");
                }
    
                return config;
            }
        }
    }
    

    And finally your entry point to the console app (DevModeDependencyTest.cs) :

     using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Configuration;
    
    namespace DevModeDependencyTest
    {
        class DevModeDependencyTest
        {
            static void Main(string[] args)
            {
                DevModeSetting devMode = new DevModeSetting();
    
                #if (DEBUG)
                    devMode = DevModeSettingsHandler.GetDevModeSetting("debug");
                    ConfigurationManager.AppSettings["webServiceUrl"] = devMode.WebServiceUrl;
                #endif
    
                Console.WriteLine(ConfigurationManager.AppSettings["webServiceUrl"]);
                Console.ReadLine();
            }
        }
    }
    

提交回复
热议问题