5 Stimmen

App.Config Problem mit benutzerdefiniertem Konfigurationsabschnitt

Ich habe eine benutzerdefinierte Konfigurationsabschnitt für meine Anwendung erstellt. Aus irgendeinem Grund erkennt Visual Studio 2010 keine meiner benutzerdefinierten Eigenschaften. Ich erhalte Warnungen ähnlich dieser für alle "add" Keys:

Schemainformationen konnten nicht für das Element 'urlFilterSection' gefunden werden

KONFIGURATIONS DATEI:

UrlFilterSection:

namespace BotFinderApp.Models
{
    public class UrlFilterSection : ConfigurationSection
    {
        public UrlFilterSection()
        {    
        }

        [ConfigurationProperty("urlFilterCollection", IsDefaultCollection = false)]
        [ConfigurationCollection(typeof(UrlFilterCollection), AddItemName = "add", ClearItemsName = "clear", RemoveItemName = "remove")]
        public UrlFilterCollection Urls
        {
            get
            {
                var urlsCollection = (UrlFilterCollection)base["urlFilterCollection"];
                return urlsCollection;
            }
        }
    }
}

UrlFilterCollection

namespace BotFinderApp.Models
{
    public class UrlFilterCollection : ConfigurationElementCollection
    {
        public UrlFilterCollection()
        {
        }

        protected override ConfigurationElement CreateNewElement()
        {
            return new UrlFilter();
        }

        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((UrlFilter)element).Url;
        }
    }
}

UrlFilter

namespace BotFinderApp.Models
{
    public class UrlFilter : ConfigurationElement
    {
        public UrlFilter()
        {
        }

        [ConfigurationProperty("url", DefaultValue = "", IsRequired = true)]
        public string Url
        {
            get { return (string)this["url"]; }
            set { this["url"] = value; }
        }

        [ConfigurationProperty("numberOfIpsToExtract", DefaultValue = "0", IsRequired = true)]
        public int NumberOfIpsToExtract
        {
            get { return (int)this["numberOfIpsToExtract"]; }
            set { this["numberOfIpsToExtract"] = value; }
        }
    }
}

3voto

timothyclifford Punkte 6522

Problem gefunden:

Decyclone hatte Recht, die Fehler waren tatsächlich nur Kompilierungszeitwarnungen.

Das eigentliche Problem war, dass ich auf meine Konfiguration wie folgt zugegriffen habe:

UrlFilterCollection serviceConfigSection = ConfigurationManager.GetSection("urlFilterSection") as UrlFilterCollection;

statt wie folgt zu sein:

UrlFilterSection serviceConfigSection = ConfigurationManager.GetSection("urlFilterSection") as UrlFilterSection;

Vielen Dank an FlipScript und Decyclone :)

UPDATE:

Ich habe herausgefunden, wie man die Kompilierungszeitwarnungen entfernt - ich benutze Visual Studio 2010. Nachdem ich meine benutzerdefinierten Konfigurationsabschnitte erstellt habe, habe ich auf die Schaltfläche "Schema erstellen" in der Symbolleiste geklickt, die die Schemadatei für die Konfiguration generiert. Diese habe ich dann in meinem Projekt gespeichert und die Warnungen verschwanden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X