18

我有一个 app.config 文件,如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="TestKey" value="TestValue" />
  </appSettings>
  <newSection>
  </newSection>
</configuration>

我正在尝试以这种方式使用它:

System.Configuration.ConfigurationFileMap fileMap = new ConfigurationFileMap(@"C:\app.config");  
System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedMachineConfiguration(fileMap); 

但是,它似乎不起作用。当我在读入文件后立即中断和调试时,我尝试查看configuration.AppSettings我得到一个'configuration.AppSettings' threw an exception of type 'System.InvalidCastException'.

我确定我正在阅读该文件,因为当我查看 configuration.Sections["newSection"] 时,我返回一个空{System.Configuration.DefaultSection}(而不是 null)。

我猜我有一些非常基本的错误...... AppSettings 发生了什么?

4

4 回答 4

18

您使用了错误的函数来读取 app.config。OpenMappedMachineConfiguration 旨在打开您的 machine.config 文件,但您正在打开一个典型的 application.exe.config 文件。以下代码将读取您的 app.config 并返回您期望的内容。

    System.Configuration.ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
    fileMap.ExeConfigFilename = @"C:\app.config";
    System.Configuration.Configuration configuration = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
    MessageBox.Show(configuration.AppSettings.Settings["TestKey"].Value);
于 2012-05-22T10:04:10.557 回答
3

如果您阅读 MSDN 上有关您尝试使用的功能的文档:

OpenExe 配置 MSDN

在您使用的方式中,它会尝试查找 app.config.exe 的配置。如果您确实想使用 appSettings,请将它们添加到应用程序的配置文件的配置中,然后使用配置管理器访问它们:

使用 appsetting .net MSDN

于 2012-05-21T11:19:15.380 回答
3

我认为“newSection”元素导致了问题。除非你也添加一个“configSections”元素来声明什么是“newSection”,.NET 将无法转换它。

你需要类似的东西:

<configSections>
  <section name="newSection" type="Fully.Qualified.TypeName.NewSection,   
  AssemblyName" />
</configSections>

在第一种情况下,我会尝试删除“newSection”元素,看看这是否能改善这种情况。

此链接解释了自定义配置部分。

于 2012-05-18T16:33:45.730 回答
2

任何时候我在我的 webconfig 中使用了一个键,我都这样做了

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <SectionGroup>
      Section Stuff
    </SectionGroup>
  </configSections>
<appsettings>
   <add key="TestKey" value="TestValue" />
</appSettings>
</configuration>

我不完全理解为什么,但它总是会给我在 configsettings 中设置应用程序设置错误。

于 2012-05-21T15:11:50.663 回答