自定义app.config节错误";无法识别的元素添加“;
本文关键字:识别 元素 添加 自定义 config 错误 quot app | 更新日期: 2023-09-27 18:26:30
我有一个小应用程序,它可以在SQL Server数据库中所有可以使用的字段中搜索给定值。其中一部分是一个自定义的app.config节,用于保存所有这些字段。然而,我在应用程序中的这一行遇到了一个错误:
var section = (DatabaseFieldSection)ConfigurationManager.GetSection("DatabaseFields");
app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="DatabaseFields" type="PartyFinder.DataAccess.DatabaseFieldSection, DataAccess"/>
</configSections>
<connectionStrings>
<!-- Data removed for security purposes -->
</connectionStrings>
<DatabaseFields>
<add Key="Person.FirstName (SV)" TableName="dbo.Person" ColumnName="FirstName" FieldType="SV" />
</DatabaseFields>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
类别:
using System;
using System.Configuration;
namespace PartyFinder.DataAccess
{
public class DatabaseFieldElement : ConfigurationElement
{
[ConfigurationProperty("Key", IsKey = true, IsRequired = true)]
public string Key
{
get { return (string)base["Key"]; }
}
[ConfigurationProperty("TableName", IsKey = false, IsRequired = true)]
public string TableName
{
get { return (string)base["TableName"]; }
}
[ConfigurationProperty("ColumnName", IsKey = false, IsRequired = true)]
public string ColumnName
{
get { return (string)base["ColumnName"]; }
}
[ConfigurationProperty("FieldType", IsKey = false, IsRequired = true)]
public string FieldType
{
get { return (string)base["FieldType"]; }
}
}
public class DatabaseFieldSection : ConfigurationSection
{
[ConfigurationProperty("DatabaseFields", IsDefaultCollection = true)]
[ConfigurationCollection(typeof(DatabaseFieldCollection), AddItemName = "add", ClearItemsName = "clear", RemoveItemName = "remove")]
public DatabaseFieldCollection DatabaseFields
{
get { return ((DatabaseFieldCollection)base["DatabaseFields"]); }
}
}
public class DatabaseFieldCollection : ConfigurationElementCollection
{
internal const string PropertyName = "Fields";
public override ConfigurationElementCollectionType CollectionType
{
get
{
return ConfigurationElementCollectionType.AddRemoveClearMap;
}
}
protected override string ElementName
{
get
{
return PropertyName;
}
}
protected override bool IsElementName(string elementName)
{
return elementName.Equals(PropertyName, StringComparison.InvariantCultureIgnoreCase);
}
public override bool IsReadOnly()
{
return false;
}
protected override ConfigurationElement CreateNewElement()
{
return new DatabaseFieldElement();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((DatabaseFieldElement)(element)).Key;
}
public DatabaseFieldElement this[int id]
{
get
{
return (DatabaseFieldElement)BaseGet(id);
}
}
}
}
我已经做了大量的搜索,但到目前为止没有任何结果。非常感谢您的任何建议!
我通过添加父DatabaseConfig
节点,成功地使以下内容在控制台应用程序中工作:
DatabaseFieldSection
类:
public class DatabaseFieldSection : ConfigurationSection
{
public static DatabaseFieldSection GetConfig()
{
return (DatabaseFieldSection)System.Configuration.ConfigurationManager.GetSection("DatabaseConfig") ?? new DatabaseFieldSection();
}
[System.Configuration.ConfigurationProperty("DatabaseFields")]
[ConfigurationCollection(typeof(DatabaseFieldCollection), AddItemName = "add")]
public DatabaseFieldCollection DatabaseFields
{
get
{
object o = this["DatabaseFields"];
return o as DatabaseFieldCollection;
}
}
}
和App.config
:
<configSections>
<section name="DatabaseConfig" type="TestEnvironment.DBConfig.DatabaseFieldSection, TestEnvironment"/>
</configSections>
<DatabaseConfig>
<DatabaseFields>
<add Key="Person.FirstName (SV)" TableName="dbo.Person" ColumnName="FirstName" FieldType="SV" />
</DatabaseFields>
</DatabaseConfig>
用法:
var config = DatabaseFieldSection.GetConfig();
配置<section />
似乎不能与配置元素集合名称相同。例如DatabaseFields
,它需要是:
章节>收藏>商品
或者:
DatabaseConfig>DatabaseFields>添加