22

我有一个带有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 属性相关联的类的任何帮助,我将不胜感激。

4

6 回答 6

23

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);
于 2008-09-10T07:14:52.413 回答
6

After some testing, I found a way to do this.

  1. Add the App.Config file to the test project. Use "Add as a link" option.
  2. Use System.Configuration.ConfigurationManager.AppSettings["myKey"] to access the value.
于 2008-09-10T11:00:09.720 回答
4

I think what you're looking for is:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
于 2008-09-10T08:38:48.390 回答
0

我同意 Gishu 的观点,即还有另一种方法。将EXE的公共/“公共”部分抽象到DLL中创建一个包装EXE来运行它不是更好吗?这当然是更常见的发展模式。只有您希望使用的东西会进入 DLL,而 EXE 会做它当前所做的所有事情,减去进入 DLL 的东西。

于 2008-09-10T07:21:31.710 回答
-1

它是一个 xml 文件,您可以使用基于 Linq-XML 或 DOM 的方法来解析出相关信息。
(也就是说,我会质疑是否没有更好的设计来解决它。你想要实现的目标。)

于 2008-09-10T07:13:34.320 回答
-1

Adding a link in the IDE would only help during development. I think lomaxx has the right idea: System.Configuration.ConfigurationManager.OpenExeConfiguration.

于 2008-09-10T11:13:10.420 回答