我有一个带有App.Config
文件的exe。现在我想在exe周围创建一个包装器dll以消耗一些功能。
问题是如何从包装器DLL中访问exe中的app.config属性?
也许我的问题应该多一点,我在exe文件中有以下app.config内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="myKey" value="myValue"/>
</appSettings>
</configuration>
问题是如何从包装器dll中取出“myValue”?
感谢您的解决方案。
实际上我最初的概念是避免使用XML文件读取方法或LINQ或其他任何方法。我首选的解决方案是使用configuration manager libraries and the like。
我将非常感谢使用通常与访问app.config属性相关联的类的任何帮助。
答案 0 :(得分:23)
ConfigurationManager.OpenMappedExeConfiguration Method将允许您执行此操作。
MSDN页面中的示例:
static void GetMappedExeConfigurationSections()
{
// Get the machine.config file.
ExeConfigurationFileMap fileMap =
new ExeConfigurationFileMap();
// You may want to map to your own exe.comfig file here.
fileMap.ExeConfigFilename =
@"C:\test\ConfigurationManager.exe.config";
System.Configuration.Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(fileMap,
ConfigurationUserLevel.None);
// Loop to get the sections. Display basic information.
Console.WriteLine("Name, Allow Definition");
int i = 0;
foreach (ConfigurationSection section in config.Sections)
{
Console.WriteLine(
section.SectionInformation.Name + "\t" +
section.SectionInformation.AllowExeDefinition);
i += 1;
}
Console.WriteLine("[Total number of sections: {0}]", i);
// Display machine.config path.
Console.WriteLine("[File path: {0}]", config.FilePath);
}
编辑:这应该输出“myKey”值:
ExeConfigurationFileMap fileMap =
new ExeConfigurationFileMap();
fileMap.ExeConfigFilename =
@"C:\test\ConfigurationManager.exe.config";
System.Configuration.Configuration config =
ConfigurationManager.OpenMappedExeConfiguration(fileMap,
ConfigurationUserLevel.None);
Console.WriteLine(config.AppSettings.Settings["MyKey"].Value);
答案 1 :(得分:5)
经过一些测试,我找到了一种方法。
System.Configuration.ConfigurationManager.AppSettings["myKey"]
访问该值。答案 2 :(得分:3)
我认为您正在寻找的是:
System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
答案 3 :(得分:0)
我是第二个Gishu的观点,还有另一种方式。将EXE的公共/“公共”部分抽象为DLL创建一个包装器EXE来运行它不是更好吗?这当然是更常见的发展模式。只有你想要消费的东西会进入DLL,而EXE会完成它当前所做的所有事情,减去进入DLL的内容。
答案 4 :(得分:-1)
这是一个xml文件,您可以使用基于Linq-XML或DOM的方法来解析相关信息。
(那就是说我会质疑是否有更好的设计,无论它是什么......你都试图实现。)
答案 5 :(得分:-1)
在IDE中添加链接只会在开发过程中提供帮助。我认为lomaxx有正确的想法:System.Configuration.ConfigurationManager.OpenExeConfiguration.