【问题标题】:Cannot convert ConfigurationProperty to int无法将 ConfigurationProperty 转换为 int
【发布时间】:2012-09-19 21:47:48
【问题描述】:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationpropertyattribute.aspx

Immutable types as configuration properties

在 QueueID 下面的 QueueConfiguration 类中返回一个 int。当我运行代码时,访问 getter 时出现此错误: 无法解析属性“queueID”的值。错误是:找不到支持“Int32”类型的属性“queueID”的字符串转换的转换器。

如果我更改 QueueID 以返回一个字符串,它工作正常。请注意,在上面引用的 microsoft 链接中,不需要类型转换器即可将端口属性作为 int 返回。我想我遗漏了一些明显的东西......

public class QueueConfiguration : ConfigurationSection
{
    [ConfigurationProperty("queueID", DefaultValue = (int)0, IsKey = true, IsRequired = true)]        
    public int QueueID
    {
        get 
        {
            return (int)this["queueID"];
        }
        set { this["queueID"] = value; }
    }

    [ConfigurationProperty("queueName", DefaultValue = "", IsKey = false, IsRequired = true)]
    public string QueueName
    {
        get { return (string)this["queueName"]; }
        set { this["queueName"] = value; }
    }
}


public class QueueConfigurationCollection : ConfigurationElementCollection
{
    internal const string PropertyName = "QueueConfiguration";

    public override ConfigurationElementCollectionType CollectionType
    {
        get
        {
            return ConfigurationElementCollectionType.BasicMapAlternate;
        }
    }

    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 QueueConfiguration();
    }

    protected override object GetElementKey(ConfigurationElement element)
    {
        return ((QueueConfiguration)(element)).QueueID;
    }

    public QueueConfiguration this[int idx]
    {
        get
        {
            return (QueueConfiguration)BaseGet(idx);
        }
    }
}

public class QueueConfigurationSection : ConfigurationSection
{
    [ConfigurationProperty("Queues")]
    public QueueConfigurationCollection Queues
    {
        get { return ((QueueConfigurationCollection)(this["Queues"])); }
        set { this["Queues"] = value; }
    }
}

这是我的 App.config(由于某种原因,该站点拒绝显示应用​​配置的 configSection 部分,所以我会尽力打破它:

<configSections>
 <section name="QueueConfigurations" type="STPMonitor.Common.QueueConfigurationSection, STPMonitor"/> 
</configSections>

<QueueConfigurations>
<Queues>
  <QueueConfiguration queueID="1" queueName="One"></QueueConfiguration>
  <QueueConfiguration queueID="2" queueName="Two"></QueueConfiguration>
</Queues>
</QueueConfigurations>

【问题讨论】:

    标签: .net


    【解决方案1】:

    好吧,我只是复制粘贴并尝试了您的代码,它可以正常工作,没有任何错误。我的阅读代码是:

    var section = ConfigurationManager.GetSection("QueueConfigurations") as QueueConfigurationSection;
    var queueId = section.Queues[0].QueueID;
    Console.Out.WriteLine("queueId = {0}", queueId);
    

    它打印queueId = 1

    这里是要点:https://gist.github.com/b8499dcfa7456624f073

    【讨论】:

    • 感冒有什么问题?这让我发疯。我删除了 bin 和 obj 的内容并清理了项目(希望它是配置文件的残余)。我仍然收到此错误:无法解析属性“queueID”的值。错误是:找不到支持“Int32”类型的属性“queueID”的字符串转换的转换器。 (C:\yada\bin\Debug\STPMonitor.vshost.exe.Config 第 229 行)这是第 229 行: 顺便说一句,谢谢您的回复!
    • 您使用什么 .NET 版本?你用什么代码来读取配置?
    • 我使用的是VS 2010。读取配置文件的代码是: List queueList = new List(); QueueConfigurationCollection 队列 = ((QueueConfigurationSection)ConfigurationManager.GetSection("QueueConfigurations")).Queues; foreach(队列中的队列配置 q){ queueList.Add(q); }
    • 嗯,这是我见过的最疯狂的事情。我将我的代码逐字复制到一个新项目中,它可以工作。我的 vs 项目有问题。
    • 如果这解决了你的问题,我建议Accepting it as an Answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多