2011-03-07 99 views
5

我有一個將設置保存到user.config文件的主應用程序。獲取任何.net應用程序的user.config文件的位置

我有第二個應用程序需要從這個文件中讀取設置。

是否有一個簡單/優雅的方式來獲取主應用程序的user.config文件的位置?

我想我可以從

[Application.LocalUserAppDataPath] [公司名稱] [AppName的 +某種GUID的] [應用版本]

但似乎手動建立的路徑大力哈克。

回答

1

創建路徑到用戶配置文件的生活通常是建立在應用程序的地方,escpecially部分

[CompanyName][AppName + some sort of guid][App version] 

的邏輯,所以沒有問框架一般的方式在用戶配置被儲存了。

然而,我們通過提供包含這樣

static Configuration GetMainConfig() 
{ 
    string mainPgmConfigDir = GetMainProgramConfigDir(); 
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap(); 
    configFile.ExeConfigFilename = Path.Combine(mainPgmConfigDir, "user.config"); 
    return ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None); 
} 

static string GetMainProgramConfigDir() 
{ 
    string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); 
    string companyDir = Path.Combine(appDataDir, VersionInfo.Company); 
    string productDir = Path.Combine(companyDir, "yourProgramName"); 
    string versionDir = Path.Combine(productDir, "yourVersionNumber"); 
    return versionDir; 
} 

此功能可以讓你對所有的應用程序相同的用戶配置的功能的應用程序的所有常見的DLL解決了這個問題,我們的程序系統。

+0

好的,謝謝你的時間。這看起來像一個體面的解決方案.. – 2011-03-07 13:24:17

0

這取決於你要做什麼。您可能希望將安裝路徑用作基本目錄。或者如果您使用安裝程序,請設置註冊表值。也許你可以用共享值創建一個獨立的配置文件?這樣你就不會混淆價值。我不明白這是否適合你,因爲你的問題並沒有告訴我們很多。所以,這只是想法。

0

您可以使用ConfigurationManager中應用的配置加載到配置對象,然後獲取文件名了的有:

Configuration cfg = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal); 
string userConfigFilePath = cfg.FileName; 

注意,您可以使用不同的ConfigurationUserLevel值去全球,本地或漫遊設置。

編輯:以exe文件名作爲參數的OpenExeConfiguration()版本似乎只允許訪問應用程序配置文件,而不是用戶配置。

+0

感謝您的答覆。如何使用它從不同的應用程序獲取配置文件? – 2011-08-31 08:48:54

+1

ConfigurationManager.OpenExeConfiguration()有一個以exe路徑作爲參數的版本: http://msdn.microsoft.com/en-us/library/ms224437.aspx – 2011-09-02 12:55:01

+1

-1從我可以告訴版本,接受EXE路徑只會給你的App.config文件。更新你的答案與如何獲得不同的應用程序的user.config,我會刪除倒票。 – 2012-07-03 18:27:22

相關問題