20

我有一个App.Config文件的exe文件。现在我想创建一个包装DLL的exe文件,以消耗一些功能。获取另一个exe的App.Config

问题是我如何从包装DLL访问exe中的app.config属性?

也许我应该多一点点我的问题,我有以下的app.config内容与EXE:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="myKey" value="myValue"/> 
    </appSettings> 
</configuration> 

的问题是如何如何得到“myvalue的”出从包装dll的?


感谢您的解决方案。

其实我最初的概念是为了避免XML文件阅读方法或LINQ或其他。我的首选解决方案是使用configuration manager libraries and the like

我会感谢任何使用通常与访问app.config属性相关的类的帮助。

回答

4

一些测试后,我发现了一个办法做到这一点。

  1. 将App.Config文件添加到测试项目。使用“添加为链接”选项。
  2. 使用​​来访问该值。
+0

+1如果你还没有发布这个答案。对于一个解决方案中跨不同项目的配置文件,这也是一个很好的解决方案。 – takrl 2012-02-23 07:29:16

0

这是一个xml文件,您可以使用基于Linq-XML或DOM的方法来解析出相关信息。
(这说我会问,如果没有更好的设计,无论它是什么..你试图实现。)

21

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); 
+0

嗨Espo, 你的建议是伟大的。但也许我正在寻找的是有点不同。我编辑我的问题是更加明确的。 – Graviton 2008-09-10 08:09:10

+0

我现在已经添加了一个如何输出所需的键/值的示例。 – Espo 2008-09-10 19:22:33

0

我第二次Gishu的观点,即有另一种方式。将EXE的common /“public”部分抽象成DLL创建一个包装EXE来运行它不是更好吗?这当然是更通常的发展模式。只有你想要消耗的东西会进入DLL,而EXE会完成它目前所做的所有事情,减去进入DLL的内容。

+0

你好,我意识到你在这里有一个观点。 但我创建封装DLL作为测试程序集来测试我的EXE内部的逻辑。所以我没有选择:) – Graviton 2008-09-10 07:28:26

2

我想你要找的是什么:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path) 
-1

在IDE中添加链接只会在开发过程中提供帮助。我认为lomaxx有正确的想法:System.Configuration.ConfigurationManager.OpenExeConfiguration.