2009-01-22 20 views
3

我有一個.NET 3.5類庫,它爲它需要的值讀取一個App.config文件。當我在Visual Studio中測試時,它可以很好地調整配置值。爲了測試它,我只是將項目更改爲控制檯應用程序並執行方法調用。正在加載錯誤的App.config

我需要從許多其他.NET程序調用此類庫,並且我希望類庫自足(我應該可以從任何其他程序調用它,並且它應該使用它自己的配置文件,不知道任何調用配置文件等)。

我可以添加對dll的引用(因爲我仍在開發中,我使用VS 2008,還沒有向GAC拋出任何東西),但類庫正在讀取的App.config來自調用程序App.config,而不是類庫的App.config。

類庫dll在同一目錄下有它的配置文件,所以它應該能夠很好地找到它,並且調用應用程序的命名方式不同。我使用的是標準的鍵值對在App.config(如配置文件myClassLibrary.dll.config的名稱),並獲取值出與下面的代碼行:

String myVal = ConfigurationSettings.AppSettings["myConfigSetting"]; 

有誰知道如何解決這個問題?

回答

0

我相信app.config將永遠由可執行文件使用。只需將其放入該目錄即可。

他們會這樣做,以確保DLL可以共享,而不必共享相同的.config文件。

您也許能夠從可執行config文件

<appSettings configSource="\lib\app.config"> 

創建一個鏈接或更改其名稱,我不明白你怎麼能有在同一個目錄都的app.config文件..他們不是有同一個名字嗎?

<appSettings configSource="\lib.app.config"> 
+0

當構建程序集時,它們都不會被重命名爲assemblyname.config嗎? – 2009-01-22 22:32:49

+0

類庫與調用應用程序是分開的,所以不需要。我可以查看配置文件,將其打開並驗證所有設置是否正確。 – Mario 2009-01-22 22:37:28

4

C#中的應用程序域只能有一個程序集級別的app.config文件。 See here on MSDN。可執行文件將始終啓動AppDomain,並默認查找名稱爲EXECUTABLE_NAME.config的配置文件。例如,SampleApp01.exe將查找SampleApp01.exe.config作爲其配置文件。

1

您可以通過這種方式,你可以在全球使用您的配置在這臺機器上運行的所有.Net應用程序把你的configs在框架文件夾內的machine.config文件,

0

我不能找到一種方法,避免爲調用dll/exe等獲取app.config。我發現的唯一方法是使用硬編碼路徑並以此方式加載。下面是我使用這樣做代碼:

using System.Configuration; 
... 
public static KeyValueConfigurationCollection getAppSettingsFromAppConfig(String appConfigPath) { 
    ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 
    fileMap.ExeConfigFilename = appConfigPath; 
    Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 
    AppSettingsSection section = config.AppSettings; 
    KeyValueConfigurationCollection appsettings = section.Settings; 
    return appsettings; 
} 

然後,您有KeyValueConfigurationElement集合,您可以使用.Value擺脫與配置文件中的字符串。