1

// WinConfiguration.cs

using System;
using System.Configuration;

namespace BANANA.Common
{
    public class WinConfiguration : ConfigurationSection
    {
        public readonly static BANANA.Common.WinConfiguration Settings
            = (BANANA.Common.WinConfiguration)System.Configuration.ConfigurationManager.GetSection("BANANA");

        [ConfigurationProperty("connections")]
        public ConnectionsCollection Connections
        {
            get { return (ConnectionsCollection)this["connections"]; }
        }

        [ConfigurationProperty("cryptography")]
        public CryptographyCollection Cryptography
        {
            get { return (CryptographyCollection)this["cryptography"]; }
        }
    }
}

// app.config

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="BANANA" type="BANANA.Common.WinConfiguration"/>
    </configSections>
    <BANANA>
        <connections>
            <add name="SqlServer2008" connectionString="" providerName="System.Data.SqlClient" priority="100" />
        </connections>
        <cryptography>
            <add type="DES" value="12345" />
            <add type="TripleDES" value="12345" />
        </cryptography>
    </BANANA>
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    </startup>
</configuration>

以前は web.config で完全に機能していました。クラス名だけ変えました。これが私の web.config とカスタム構成クラスです。

// WebConfiguration.cs

using System;
using System.Configuration;

namespace BANANA.Common
{
    public class WebConfiguration : ConfigurationSection
    {
        public readonly static BANANA.Common.WebConfiguration Settings = (BANANA.Common.WebConfiguration)System.Web.Configuration.WebConfigurationManager.GetSection("BANANA");

        [ConfigurationProperty("connections")]
        public ConnectionsCollection Connections
        {
            get { return (ConnectionsCollection)this["connections"]; }
        }

        [ConfigurationProperty("cryptography")]
        public CryptographyCollection Cryptography
        {
            get { return (CryptographyCollection)this["cryptography"]; }
        }
    }
}

// web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <section name="BANANA" type="BANANA.Common.WebConfiguration"/>
    </configSections>
    <BANANA>
        <connections>
            <add name="SqlServer2008" connectionString="" providerName="System.Data.SqlClient" priority="100" />
        </connections>
        <cryptography>
            <add type="DES" value="12345" />
            <add type="TripleDES" value="12345" />
        </cryptography>
    </BANANA>
</configuration>

WebConfiguration.cs と web.config で問題なく動作します。しかし、WinConfiguration.cs と app.config を使用すると、「'BANANA.Common.WinConfiguration' の型初期化子が例外をスローしました。」のようなエラーが発生します。誰でもこのエラーを修正できますか?

4

1 に答える 1

6

構成クラスが存在するアセンブリ名 (EXE または DLL の名前) を指定する必要があると思います。

<section name="BANANA" type="BANANA.Common.WinConfiguration, YOUR_ASSEMBLY_NAME"/>
于 2013-08-08T03:03:04.493 に答える