如何为从其他应用程序加载的特定插件.DLL的每个(漫游)用户配置设置设置支持?
我有一个.DLL作为外接程序/插件从另一个应用程序加载,并希望根据计算机,.dll(=可执行文件)独立于加载它的主应用程序保留特定于此的配置设置,漫游用户或用户个人资料。
我发现System.Configuration.ExeConfigurationFileMap
类可能提供我需要的内容,但我无法弄清楚如何设置特定于我的(插件)应用程序的正确路径。
到目前为止我的代码是:
public class MyConfigurationSettings : ConfigurationSection
{
public static MyConfigurationSettings GetSection (ConfigurationUserLevel ConfigLevel)
{
string configFile = Assembly.GetAssembly(typeof(MyConfigurationSettings)).Location + ".config";
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = configFile;
configFileMap.LocalUserConfigFilename = <localUserConfigFile>; // ??? What filename to place here and how to get it based on the current environment ???
configFileMap.RoamingUserConfigFilename = <roamingUserConfigFile>; // ???;
System.Configuration.Configuration Config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigLevel);
// ...
}
}
有人能指出我正确的方向吗?可用的文档和搜索结果太令人困惑或不足以让我做到这一点。对不起,如果这似乎是一个愚蠢的问题,但是我的C#(.NET)技能将在4年多之后变得生锈,而不是用它来赚取每日面包。
我还认为这不是主要关于配置设置管理的问题,而是如何获取特定于安装的应用程序实例配置的路径。
答案 0 :(得分:3)
您设置RoamingUserConfigFilename = RoamingName.config
并将其置于漫游配置文件下
%AppData%\[AppName]\[Vendor]\[CodedPath]\[Version]\RoamingName.config
您还设置LocalUserConfigFilename = LocalName.config
并将其置于本地资料:
%LocalAppData%\[AppName]\[Vendor]\[CodedPath]\[Version]\LocalName.config
现在致电
ConfigurationManager.OpenMappedExeConfiguration(
exeMap,
ConfigurationUserLevel.PerUserRoamingAndLocal);
将按以下顺序读取配置:
来自MSDN blogs。
在User.config
下搜索c:\Users\[User]\AppData
的样本。另请参阅CP article。
代码示例:
public static MyConfigurationSettings GetSection (ConfigurationUserLevel ConfigLevel)
{
try
{
string appDataPath = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string localDataPath = System.Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
System.Configuration.ExeConfigurationFileMap exeMap = new ExeConfigurationFileMap();
exeMap.ExeConfigFilename = System.IO.Path.Combine(appDataPath, @"MyCompany\MyPlugin\Default.config");
exeMap.RoamingUserConfigFilename = System.IO.Path.Combine(appDataPath, @"MyCompany\MyPlugin\Roaming.config");
exeMap.LocalUserConfigFilename = System.IO.Path.Combine(localDataPath, @"MyCompany\MyPlugin\Local.config");
System.Configuration.Configuration Config = ConfigurationManager.OpenMappedExeConfiguration(exeMap,ConfigLevel);
return (MyConfigurationSettings)Config.GetSection("MyConfigurationSettings");
}
catch (Exception ex) {
// ...
}
return null; // or throw an appropriate exception
}
答案 1 :(得分:-2)
通常从您放入的特殊文件夹中加载配置,并将其放入其中一个漫游(即非本地)位置。操作系统根据漫游规范处理其余部分。
ConfigSections的使用完全无关紧要,除非非常特别需要使用配置文件。在过去10年中我见过的任何.NET项目中,此文件从未用于特定于用户的设置。