2

.NET 用の構成セクション デザイナーを使用して単純なConfigurationElementCollection. サブ要素が Intellisense で表示されるため、すべてが正常にビルドされ、コードが自動的に生成されるようです

残念ながら、構成セクションでコレクションに要素を追加しましたが、それらは実行時には存在しません。コレクションのLengthプロパティが 0 であることを示しています。つまり、コレクションは空ですが、XML の例でわかるように、それらを明確に配置しています。

構成例

<logParserSettings xmlns="LogParser">
  <domainControllers>
    <domainController ID="0" name="Local" serverType="Local" enabled="true"/>
    <domainController ID="1" name="DC1" serverType="WindowsServer2003" enabled="false" />
    <domainController ID="2" name="DC2" serverType="WindowsServer2008" enabled="false" />
  </domainControllers>
</logParserSettings>

その他

  • デザイナーでは、私が持っているのは、ここに表示されている a ConfigurationSection、 a ConfigurationElementCollection、および aだけです。ConfigurationElement追加の構成要素/セクション/グループはありません
  • 実行時に何も追加または削除していません
  • プロパティの生成と非生成の両方を試しましSingletonたが、シングルトン インスタンスも設定クラスのインスタンスも機能していないようです
  • ID 属性の場合、Is Keyプロパティは true に設定され、他のすべての属性は true としてマークされます。Is Required

誰もこれに遭遇したことがありますか?もしそうなら、これを意図したとおりに機能させるには、どのような変更を加える必要がありますか?

4

1 に答える 1

8

まあ、問題を特定の要素にまで特定することで、真の問題を非常に複雑にしすぎましたConfigurationSection。にアクセスできないことにも気付きAppSettings、猛烈な手がかりが得られました。

究極の原因?プロジェクトは、クラス ライブラリとしてコンパイルされました。構成ファイルは、アプリケーション レベルでのみ使用できます。NUnit を使用してテストを実行していたため、テスト プロジェクトの構成ファイルがクラス ライブラリの開発用ファイルをオーバーライドしていました。これは、ASP.NET の世界に行き詰まっていない開発者にとっては明らかなことでしょう。

テスト プロジェクト内のに次configSectionを追加します。app.config

<section name="customConfigSection" type="ClassLibraryNamespace.SettingsClass, ClassLibraryNamespace"/>

対応するセクションに入力すると、期待どおりにデータにアクセスできました。

うまくいけば、これにより誰かがデバッグの時間を節約できます。

于 2009-04-10T18:48:53.507 に答える