代码之家  ›  专栏  ›  技术社区  ›  Jonathan C Dickinson

将ConfigurationManager重定向到另一个文件

  •  5
  • Jonathan C Dickinson  · 技术社区  · 15 年前

    我正在寻找重定向 标准 .NET配置管理器类到另一个文件; 完全地 . 路径是在运行时确定的,因此 我不能使用configsource 或者这样(这不是一个重复的问题——我已经看过其他问题)。

    我基本上是想复制ASP.NET在封面后面所做的工作。因此,不仅我的类应该从新的配置文件中读取,而且还应该从任何标准的.NET文件中读取(我特别尝试使用的是system.codedom元素)。

    我已经打开了Reflector并开始研究ASP.NET是如何做到的-它毛茸茸的,完全没有文档记录。我希望有人已经对这个过程进行了逆向工程。不一定要寻找一个完整的解决方案(很好),只是 文档 .

    1 回复  |  直到 12 年前
        1
  •  9
  •   Jonathan C Dickinson    15 年前

    我终于明白了。有一个公众 文件化的 意思是这样做-但它隐藏在.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