6

我有一个 dot.NET 4.0 Web 应用程序,其中定义了一个自定义部分:

<configuration>
    <configSections>
    <section name="registrations" type="System.Configuration.IgnoreSectionHandler, System.Configuration, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="true" restartOnExternalChanges="true" allowLocation="true"/>
    ....

在 web.config 文件的末尾,我有相应的部分:

  ....
  <registrations>
    .....
  </registrations>
</configuration>

每次我打电话时,System.Configuration.ConfigurationManager.GetSection("registrations");我都会收到以下异常:

为注册创建配置节处理程序时出错:给定的程序集名称或代码库无效。(来自 HRESULT 的异常:0x80131047)(C:\...\web.config 第 13 行)

我也在使用 Unity,但不知道这是否与错误有关。

你以前遇到过这个错误吗?我该如何解决?我需要IgnoreSectionHandler用别的东西代替吗?

4

2 回答 2

12

鉴于此 app.config:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="registrations" type="MyApp.MyConfigurationSection, MyApp" />
    </configSections>
    <registrations myValue="Hello World" />
</configuration>

然后尝试使用这个:

namespace MyApp
{
    class Program
    {
        static void Main(string[] args) {
            var config = ConfigurationManager.GetSection(MyConfigurationSection.SectionName) as MyConfigurationSection ?? new MyConfigurationSection();

            Console.WriteLine(config.MyValue);

            Console.ReadLine();
        }
    }

    public class MyConfigurationSection : ConfigurationSection
    {
        public const String SectionName = "registrations";

        [ConfigurationProperty("myValue")]
        public String MyValue {
            get { return (String)this["myValue"]; }
            set { this["myValue"] = value; }
        }

    }
}
于 2013-04-29T18:34:36.167 回答
9

您在 App.Config 中的部分的类型属性中缺少命名空间。事实上,你也不需要那里的完整装配信息。只有命名空间就足够了

更新 1

  yourcustomconfigclass config =(yourcustomconfigclass)System.Configuration.ConfigurationManager.GetSection(
    "registrations");

并且在配置文件中只写

   <section name="registrations" type="System.Configuration.IgnoreSectionHandler" requirePermission="true" restartOnExternalChanges="true" allowLocation="true"/>
于 2013-04-29T18:04:30.627 回答