获取任何.net应用程序的user.config文件的位置

时间:2011-03-07 11:43:25

标签: .net visual-studio

我有一个主要的应用程序,可以将设置保存到user.config文件。

我有第二个需要从此文件中读取设置的应用。

是否有一种简单/优雅的方式来获取主应用程序的user.config文件的位置?

我想我可以从

手动构建路径
  

[Application.LocalUserAppDataPath] [公司名称] [AppName的   +某种guid] [应用程序版本]

但这似乎非常黑客。

3 个答案:

答案 0 :(得分:1)

创建用户配置文件所在位置路径的逻辑通常构建在应用程序中,特别是部件

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

因此,没有一般方法可以询问框架存储用户配置的位置。

但是,我们通过为包含此类功能的所有应用程序提供通用DLL,为我们的程序系统解决了这个问题

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;
}

此功能为您的所有应用程序提供相同的用户配置。

答案 1 :(得分:0)

这取决于你将要做什么。您可能希望将安装路径用作基目录。或者,如果使用安装程序,请设置注册表值。也许你可以用共享值创建一个独立的配置文件?这样你就不会混淆价值观。我不明白这是否适合你,因为你的问题没有告诉我们很多。所以,这只是想法。

答案 2 :(得分:0)

您可以使用ConfigurationManager将应用程序配置加载到Configuration对象中,然后从中获取文件名:

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

请注意,您可以使用不同的ConfigurationUserLevel值来进行全局,本地或漫游设置。

编辑:以exe文件名作为参数的OpenExeConfiguration()版本似乎只能访问app配置文件,而不是用户配置。