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

'newSection'要素が問題を引き起こしていると思います。'configSections'要素も追加しない限り、'newSection'が何であるかを宣言するために、.NETはそれをキャストできません。

次のようなものが必要です。

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

最初に、「newSection」要素を削除して、状況が改善されるかどうかを確認します。

このリンクは、カスタム構成セクションについて説明しています。

于 2012-05-18T16:33:45.730 に答える
3

使用しようとしている関数に関するMSDNのドキュメントを読んだ場合:

OpenExeConfiguration MSDN

あなたが使用している方法で、それはapp.config.exeの構成を見つけようとします。appSettingsを利用する場合は、アプリケーションから構成ファイルの構成に追加し、構成マネージャーを使用してアクセスします。

appsetting.netMSDNを使用する

于 2012-05-21T11:19:15.380 に答える
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 に答える