2009-02-10 53 views
7

有沒有什麼辦法可以在運行時指定我想要使用的配置文件(除App.config之外)?例如,我想從命令行讀取第一個參數,該參數將作爲應用程序配置的路徑,我希望我的應用程序在使用ConfigurationManager.AppSettings時引用它(這可能是不可能的,但仍然值得一提)。
我發現這段代碼:.NET自己的配置文件

System.Configuration.Configuration config 
    = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     config.AppSettings.File = myRuntimeConfigFilePath; 
     config.Save(ConfigurationSaveMode.Modified); 
     ConfigurationManager.RefreshSection("appSettings"); 

它的工作原理,但它會覆蓋原來的App.config的appSettings部分和我的應用程序不應該寫什麼。

回答

9

我發現這個,它的工作原理。 「路徑」是配置文件的路徑。

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", path); 
4

不是直接。

間接的,你可以:

  • 旋轉了第二AppDomain,指定配置文件中爲(AppDomainSetup.ConfigurationFile),並在應用程序域中執行代碼
  • 有兩個EXE文件;第一(foo.exe)只是拷貝的配置(進入bar.exe.config)和貝殼第二EXE(bar.exe)警告:螺紋種族]
+0

你是什麼意思「執行應用程序域中的代碼」? – agnieszka 2009-02-10 11:30:44

+0

這是一個很大的話題......基本上,在.NET中,您在Process - AppDomain中具有抽象級別。看到MSDN:http://msdn.microsoft.com/en-us/library/yb506139.aspx – 2009-02-10 11:45:39

0

如果您正在使用log4net的,你可以指定的AssemblyInfo.cs配置文件

0

另一種解決方案是重構並創建自己的ConfigurationRepository。然後,您可以在運行時更改您將使用的特定存儲庫實現。例如,AppConfigRepository : ConfigurationRespository只是舊ConfigurationManager.AppSettings["key"]的外觀。