【问题标题】:Unable to create a custom section for web.config无法为 web.config 创建自定义部分
【发布时间】:2012-12-01 11:27:25
【问题描述】:

我在 web.config 文件中创建了一个自定义部分,但它无法加载我将要管理该部分的自定义类型。

以下是定义:

<configSections>
<section
        name="MembershipProviders"
        type="MyApp.BusinessObjects.MembershipProviderFactory.MembershipProvidersSection"
        allowLocation="true"
        allowDefinition="Everywhere"
      />
</configSections>


namespace MyApp.BusinessObjects
{
    public class MembershipProviderFactory
    {
        internal virtual IMembershipProvider Create()
        {
        }

        public class MembershipProvidersSection : ConfigurationSection
        {
            public class AddElement: ConfigurationElement
            {
                [ConfigurationProperty("name", IsKey  = true, IsRequired = true)]
                public string Name
                {
                    get
                    {
                        return this["name"].ToString();
                    }
                    set
                    {
                        this["name"] = value;
                    }
                }

                [ConfigurationProperty("type", IsRequired = true)]
                public string FullyQualifiedTypeName
                {
                    get
                    {
                        return this["type"].ToString();
                    }
                    set
                    {
                        this["type"] = value;
                    }
                }
            }

            public class AddElementCollection : ConfigurationElementCollection
            {
                protected override ConfigurationElement CreateNewElement()
                {
                    return new AddElement();
                }

                protected override object GetElementKey(ConfigurationElement element)
                {
                    return ((AddElement)element).Name;
                }
            }


            [ConfigurationProperty("currentProvider", IsRequired = false)]
            public string CurrentProvider
            {
                get
                {
                    return this["currentProvider"].ToString();
                }
                set
                {
                    this["currentProvider"] = value;
                }
            }

            [ConfigurationProperty("add", IsRequired = true, IsDefaultCollection = true)]
            public AddElementCollection Instances
            {
                get { return (AddElementCollection)this["add"]; }
                set { this["add"] = value; }
            }
        }
    }
}

我得到一个运行时异常:

为 MembershipProviders 创建配置节处理程序时出错:无法加载类型“MyApp.BusinessObjects.MembershipProviderFactory.MembershipProvidersSection”。

更新

我还在配置文件中包含了实际部分,如下所示:

<MembershipProviders currentProvider ="DefaultMembershipProvider" />

我仍然遇到同样的异常。

【问题讨论】:

  • 您的会员提供者部分在 Web.config 中的实际外观如何?
  • 我还没有包含一个。一个部分可以是可选的吗?也就是说,我可以在 web.config 中拥有该部分的声明而不是实际的部分本身吗?
  • 该部分可以是可选的。您可以将 ConfigurationProperty 属性添加到配置部分或 IsRequired 设置为 false 的元素:[ConfigurationProperty("elementName", IsRequired = false)]
  • 谢谢。照这样说,我并没有做错什么。但是,我现在仍然包含该部分。我已经更新了原来的问题。

标签: c# configuration web-config app-config configuration-files


【解决方案1】:

您需要将程序集名称指定为type 属性的一部分:

<section
    name="MembershipProviders"
    type="Namespace.TheCustomSection, TheAssemblyNameGoesHere"
    allowLocation="true"
    allowDefinition="Everywhere"
/>

编辑
我没有注意到 MembershipProvidersSection 类是一个嵌套类。
类型名称应为:

MyApp.BusinessObjects.MembershipProviderFactory+MembershipProvidersSection

【讨论】:

  • 如果是当前程序集则不行?
  • @WaterCoolrv2:解析配置文件时没有“当前程序集”。
  • 没错。因此,当您要加载的类型在同一个程序集中时,不需要在配置中传递程序集名称。
  • @WaterCoolrv2:不,程序集名称必需的。没有“当前程序集”的概念。您必须始终指定程序集名称。
  • @WaterCoolrv2,理查德是对的。如果没有程序集名称,它将无法工作。
【解决方案2】:

您在声明类型时缺少程序集名称:

MyApp.BusinessObjects.MembershipProviderFactory.MembershipProvidersSection,?

看看我的一篇关于自定义配置的帖子: C# WCF System.Configuration.ConfigurationErrorsException: Unrecognized element 'ManagedService'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多