2010-12-15 39 views
17

我正在創建一個類庫項目。 現在默認情況下,我有一個App.Config文件,以便將所有特定於環境的數據放入該配置文件中。.NET中的多個App.Config文件類庫項目

現在基於環境(無論是開發/測試/生產),我計劃在2010對三頁App.Config中的文件,如

App.Dev.Config 

App.Test.Config 

App.Prod.Config 

想知道如何將應用程序知道哪個配置文件使用。

任何人都實現了這種情況。任何代碼示例/文章都會有所幫助。

感謝

回答

15

該應用程序將使用名爲YourExcecutable.exe.config配置文件是默認的App.config包含在(可執行文件)項目中的文件。 請注意,.NET僅爲整個應用程序加載一個配置文件。您不能使用多個配置文件(即每個庫項目一個),而無需編碼。

  1. 選項:可以使用postbuild事件和不同的解決方案配置,以複製一個或另一個App.config文件到輸出文件夾

  2. 選項:可以使用ConfigurationManager中類加載的替代配置文件通過代碼。

+7

+1:在這裏要非常明確:永遠不會使用與裝配項目關聯的配置文件。只有主要的項目配置文件將被使用。你需要在那個級別控制它們。 – NotMe 2010-12-15 20:39:47

+0

@NotMe:我知道這從你的想法來看更加明確,但是有一些方法可以包含庫配置文件。給他們一個獨特的名字,將他們設置爲複製到輸出目錄,並讓你的啓動項目的app.config引用它們作爲外部鏈接。 – Flater 2017-12-04 16:59:22

4

在運行時加載不同的應用程序配置文件可以做到使用映射的配置文件您需要在項目中添加對System.Configuration.dll的引用

將所有其他配置文件(例如App1.config,App2.config等)的Copy to Output Directory屬性的值設置爲其他臨時文件默認的(App.config)爲Copy if newer。這樣,在項目建成後,它們將在項目輸出目錄(\ bin \ debug)中可用。該屬性的默認值是Do not copy

enter image description here

下面是關於如何從非默認的配置文件讀取配置數據的代碼片段:

ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap(); 
configFileMap.ExeConfigFilename = "App1.config"; // app1.config should be present in root directory from where application exe is kicked off 

// Get the mapped configuration file 
var config = ConfigurationManager.OpenMappedExeConfiguration( 
     configFileMap, ConfigurationUserLevel.None); 

//get the relevant section from the config object 
AppSettingsSection section = (AppSettingsSection)config.GetSection("appSettings"); 

//get key value pair 
var keyValueConfigElement = section.Settings["appSettingsKey"]; 
var appSettingsValue = keyValueConfigElement.Value; 

如果您有多個應用程序的配置文件,那麼你可以保持一個設置在默認App.config文件的幫助下,您可以在運行時決定要加載哪個額外的配置文件,例如, App1.config

注意:要知道,像ConfigurationManager.AppSettings["DeployEnv"],代碼仍然從默認App.config文件中讀取數據。此行爲無法更改。加載默認App.config文件不能被禁止。您必須使用上面所示的替代方法來讀取非默認配置文件中的數據

相關問題