カスタム構成の実装を使用してアプリケーションを作成しようとしました。この目的のために、後で追跡できる小さなダミーアプリを書き留めました。しかし、私は設定をロードすることができません。ここで私が見逃していることについてのアイデアは本当に役に立ちます。
設定ファイル
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- Configuration section-handler declaration area. -->
<configSections>
<sectionGroup name="SecuritySettingsGroup">
<section name="SecuritySettings" type="ConfigSecHandler.ServicesSection, ConfigSecHandler"/>
</sectionGroup>
<!-- Other <section> and <sectionGroup> elements. -->
</configSections>
<!-- Configuration section settings area. -->
<SecuritySettingsGroup>
<SecuritySettings>
<ServiceSecuritySettings>
<Service svcName="xStore" svcUser="user1" svcPermissions="pemission1"/>
<Service svcName="xStore" svcUser="user2" svcPermissions="pemission3"/>
</ServiceSecuritySettings>
</SecuritySettings>
</SecuritySettingsGroup>
</configuration>
クラス
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Xml;
namespace ServicesConfigSection {
public class ServicesSection : ConfigurationSection {
[ConfigurationProperty("ServiceSecuritySettings", IsDefaultCollection = false)]
[ConfigurationCollection(typeof(ServiceCollection),
AddItemName = "Service")]
public ServiceCollection Services {
get { return (ServiceCollection)this["ServiceSecuritySettings"]; }
set { this["ServiceSecuritySettings"] = value; }
}
public static ServicesSection GetConfiguration() {
return GetConfiguration("SecuritySettingsGroup/SecuritySettings");
}
public static ServicesSection GetConfiguration(string section) {
return ConfigurationManager.GetSection(section) as ServicesSection;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace ServicesConfigSection {
public class ServiceCollection : ConfigurationElementCollection {
protected override ConfigurationElement CreateNewElement() {
return new ServiceElement();
}
protected override object GetElementKey(ConfigurationElement element) {
return ((ServiceElement)element).SvcName;
}
public override ConfigurationElementCollectionType CollectionType {
get { return ConfigurationElementCollectionType.AddRemoveClearMap; }
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace ServicesConfigSection {
public class ServiceElement : ConfigurationElement {
[ConfigurationProperty("svcName", DefaultValue = "", IsRequired = true)]
public String SvcName {
get { return (String)this["svcName"]; }
set { this["svcName"] = value; }
}
[ConfigurationProperty("svcUser", DefaultValue = "", IsRequired = true)]
public String SvcUser {
get { return (String)this["svcUser"]; }
set { this["svcUser"] = value; }
}
[ConfigurationProperty("svcPermissions", DefaultValue = "", IsRequired = true)]
public String SvcPermissions {
get { return (String)this["svcPermissions"]; }
set { this["svcPermissions"] = value; }
}
}
}
主要
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using ServicesConfigSection;
namespace TestApp {
class Program {
static void Main(string[] args) {
ServicesSection svcConfig = ServicesSection.GetConfiguration();
foreach (ServiceElement thisConfig in svcConfig.Services) {
Console.WriteLine(thisConfig.SvcName);
}
}
}
}
XML の読み込み中にエラーが発生しました
System.Configuration.ConfigurationErrorsException は処理されませんでした Message=SecuritySettingsGroup/SecuritySettings の構成セクション ハンドラーの作成中にエラーが発生しました: アセンブリ 'ConfigSecHandler' から型 'ConfigSecHandler.ServicesSection' を読み込めませんでした。(######\TestApp\bin\Debug\TestApp.vshost.exe.config 6 行目)
仮想ホスト構成
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<!-- Configuration section-handler declaration area. -->
<configSections>
<sectionGroup name="SecuritySettingsGroup">
<section name="SecuritySettings" type="ServicesConfigSection.ServicesSection, ServicesConfigSection" />
</sectionGroup>
<!-- Other <section> and <sectionGroup> elements.-->
</configSections>
<!-- Configuration section settings area.-->
<SecuritySettingsGroup>
<SecuritySettings>
<ServiceSecuritySettings>
<Service svcName="xStore" svcUser="user1" svcPermissions="pemission1" />
<Service svcName="xStore" svcUser="user2" svcPermissions="pemission3" />
</ServiceSecuritySettings>
</SecuritySettings>
</SecuritySettingsGroup>
</configuration>