2

IIS 7 構成エディターを使用して、アプリケーション固有の設定を編集したいと考えています。applicationSettings設定は、Visual Studio を使用してプロジェクトに設定を追加するときに自動的に追加される種類のセクションに保存されます。私のセクションは次のようになります。

<applicationSettings>
    <My.Custom.Properties.Settings>
      <setting name="SomePath" serializeAs="String">
        <value>D:\Folder\SubFolder</value>
      </setting>
    </My.Custom.Properties.Settings>
</applicationSettings>

したがって、ここからの指示に従い、多くの試行錯誤の後、IIS エディターにセクションを読み込むことができます。要素の属性を表示 (および編集) できます。setting要素も表示valueされますが、その中のフォルダー パスが読み込まれておらず、編集できません。これが必要です。IIS に追加したスキーマは次のようになります。

<configSchema>
     <sectionSchema name="applicationSettings/My.Custom.Properties.Settings">
       <collection addElement="setting">
         <attribute name="name" type="string"></attribute>
         <attribute name="serializeAs" type="string"></attribute>
         <element name="value"></element>
       </collection>
     </sectionSchema>
</configSchema>

私がやろうとしていることに成功した人はいますか、それとも、古いappSettingsセクションに戻らないでこれを回避する方法はありますか?

4

1 に答える 1

2

他に代替手段が見つからなかったので、要素の値が要素内の別の要素ではなく、要素の属性として格納されるapplicationSettingsようにセクションのスキーマを変更することにしました。これは、IIS エディターが好むものです。settingしたがって、私の設定は次のようになります。

<setting name="SomePath" serializeAs="String" value="D:\Folder\SubFolder">
</setting>

もちろん、これは、新しい属性から読み取ることができるように、独自の設定プロバイダー (「カスタム設定プロバイダー」を参照) を実装することを意味していました。これはそれほど難しいことではなくLocalFileSettingsProvider、.NET に付属の を継承する場合はさらに難しくありません。さらに、実行時に設定を変更する予定がない場合は、GetPropertyValuesメソッドを実装するだけで済みます。

このアプローチの欠点は、Visual Studio からのデザイン時のサポートが複雑になることです。これは、設定デザイナーが新しいスキーマを認識せず、カスタム プロバイダーを使用するように指示する方法が見つからないためです。幸いなことに、これに関するエラーが表示された後にデザイナーが読み込まれるため、デザイナーを使用して設定を定義することができます。ただし、保存すると、構成ファイルがデフォルトのスキーマで上書きされます。これに対する私の解決策は、Visual Studio のビルド前イベントで実行される JScript の一部を作成することでした。これにより、Visual Studio によって変更された設定が私のスキーマに準拠するように変更されます。このページは、スクリプトをコーディングするときに非常に役立ちました。

カスタム プロバイダーを実装するためのヒント:

  • プロパティを使用しAppDomainSetup.ConfigurationFileて構成ファイルにアクセスしました。
  • 設定をロードするときは、プロパティを設定するだけSettingsPropertyValue.SerializedValueで、フレームワークが実際の値を逆シリアル化します。
  • アプリケーションが実行時にプロバイダーを使用するようにするには、デザイナーで個々の設定をクリックし、[プロパティ] ペインで、[プロバイダー] フィールドにプロバイダーのクラス名を入力します。デザイナーを介して入力されたすべての設定のプロバイダーを指定するには、[コードの表示] ボタンをクリックし、クラスに を追加しますSettingsProviderAttribute
于 2011-09-21T07:25:03.270 に答える