2011-03-07 85 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

相关问题