将ConfigurationManager重定向到另一个文件

时间:2009-07-28 15:22:32

标签: c# configuration internals

我希望将标准 .Net ConfigurationManager类重定向到另一个文件; 完全。路径是在运行时确定的,所以我不能使用configSource 等等(这不是一个重复的问题 - 我看过其他人)。

我基本上试图复制ASP.Net在幕后做的事情。因此,不仅我的类应该从新的配置文件中读取,而且还应该读取任何标准的.Net内容(我特意尝试使用的是system.codeDom元素)。

我已经破解了开放的Reflector并开始研究ASP.Net是如何做到的 - 它非常多毛且完全没有记录。我希望其他人对这个过程进行反向设计。不一定要寻找完整的解决方案(会很好),而只需要文档

1 个答案:

答案 0 :(得分:9)

我终于明白了。有一个公共记录的意味着这样做 - 但它隐藏在.Net框架的深处。更改自己的配置文件需要反射(只需刷新ConfigurationManager);但是可以更改通过公共API创建的AppDomain的配置文件。

不,谢谢我提交的Microsoft Connect功能,以下是代码:

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);
    }
}

输出:

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