获取另一个Exe的App.Config
时间:2020-03-05 18:50:34 来源:igfitidea点击:
我有一个带有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或者其他方法。我的首选解决方案是使用配置管理器库等。
我将感谢使用通常与访问app.config属性相关联的类的任何帮助。
解决方案
回答
这是一个xml文件,我们可以使用基于Linq-XML或者DOM的方法来解析相关信息。
(那是我想问的是,有没有一种更好的设计……我们正在尝试实现。)
回答
ConfigurationManager.OpenMappedExeConfiguration方法将允许我们执行此操作。
来自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);
回答
我同意Gishu的观点,那就是另一种方式。将EXE的common /" public"部分抽象到DLL中创建一个包装EXE来运行它会更好吗?当然,这是更常见的发展模式。只有我们希望消耗的内容才会进入DLL,而EXE会执行它当前所做的所有事情,减去DLL中的内容。
回答
我认为我们正在寻找的是:
System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
回答
经过一些测试,我找到了一种方法。
- 将App.Config文件添加到测试项目。使用"添加为链接"选项。
- 使用
System.Configuration.ConfigurationManager.AppSettings [" myKey"]
访问该值。
回答
在IDE中添加链接仅在开发期间会有所帮助。我认为lomaxx有一个正确的主意:System.Configuration.ConfigurationManager.OpenExeConfiguration。