Redirect ConfigurationManager to Another File

前端 未结 1 1319
孤城傲影
孤城傲影 2021-02-10 06:10

I am looking to redirect the standard .Net ConfigurationManager class to another file; entirely. The path is determined at runtime so I can\'t use conf

1条回答
  •  遥遥无期
    2021-02-10 06:47

    I finally figured it out. There is a public documented means to do this - but it's hidden away in the depths of the .Net framework. Changing your own config file requires reflection (to do no more than refresh the ConfigurationManager); but it is possible to alter the configuration file of an AppDomain that you create via public APIs.

    No thanks to the Microsoft Connect feature I submitted, here is the code:

    class Program
    {
        static void Main(string[] args)
        {
            // Setup information for the new appdomain.
            AppDomainSetup setup = new AppDomainSetup();
            setup.ConfigurationFile = "C:\\my.config";
    
            // Create the new appdomain with the new config.
            AppDomain d2 = AppDomain.CreateDomain("customDomain", AppDomain.CurrentDomain.Evidence, setup);
    
            // Call the write config method in that appdomain.
            CrossAppDomainDelegate del = new CrossAppDomainDelegate(WriteConfig);
            d2.DoCallBack(del);
    
            // Call the write config in our appdomain.
            WriteConfig();
    
            Console.ReadLine();
        }
    
        static void WriteConfig()
        {
            // Get our config file.
            Configuration c = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    
            // Write it out.
            Console.WriteLine("{0}: {1}", AppDomain.CurrentDomain.FriendlyName, c.FilePath);
        }
    }
    

    Output:

    customDomain: C:\my.config
    InternalConfigTest.vshost.exe: D:\Profile\...\InternalConfigTest.vshost.exe.config
    

    0 讨论(0)
提交回复
热议问题