web-dev-qa-db-ja.com

C#ConfigurationManager.GetSectionはファイルまたはアセンブリを読み込めませんでした

ハマった!これは本当に気難しいようですが、どこが間違っているのかわかりません。 2.0 C#ASP.NETWebサイトを作成しています。 web.configファイルのカスタムセクションを次のように使用しようとしています。

DatabaseFactorySectionHandler sectionHandler = ConfigurationManager.GetSection("DatabaseFactoryConfiguration") as DatabaseFactorySectionHandler;

Bailey.DataLayer名前空間にあるオブジェクト用に別のDLLがあります。しかし、test.aspxページを実行すると、次のエラーが発生します。

System.Configuration.ConfigurationErrorsException was unhandled by user code

Message="An error occurred creating the configuration section handler for DatabaseFactoryConfiguration: Could not load file or Assembly 'Bailey.DataLayer' or one of its dependencies. The system cannot find the file specified. (C:\\Documents and Settings\\Administrator.PIP\\My Documents\\Visual Studio 2005\\WebSites\\bailey\\web.config line 13)"
Source="System.Configuration"

私が取得しようとしているクラスは次のとおりです。

namespace Bailey.DataLayer
{
    public sealed class DatabaseFactorySectionHandler : ConfigurationSection
    {
        [ConfigurationProperty("Name")]
        public string Name
        {
            get { return (string)base["Name"]; }
        }

        [ConfigurationProperty("ConnectionStringName")]
        public string ConnectionStringName
        {
            get { return (string)base["ConnectionStringName"]; }
        }

        public string ConnectionString
        {
            get
            {
                try
                {
                    return ConfigurationManager.ConnectionStrings[ConnectionStringName].ConnectionString;
                }
                catch (Exception excep)
                {
                    throw new Exception("Connection string " + ConnectionStringName +
                                        " was not found in web.config. " + 
                                        excep.Message);
                }
            }
        }
    }
}

Web構成ファイルには次のセクションがあります。

<configSections>
  <section name="DatabaseFactoryConfiguration" 
           type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" />
</configSections>

私はこれをコンソールアプリで問題なく実行しましたが、Webページにあること以外に違いは見られません。

[〜#〜]編集[〜#〜]

すべてコンパイルされ、実行時にエラーがスローされるため、test.aspx.csページで参照されているため、アセンブリが見つかったとしか考えられません。

Test.aspx.csページの上部に次のusingステートメントがあります。

using Bailey.DataLayer;

これがweb.configファイル全体なので、混乱はありません。

<configuration>
   <configSections>
      <section name="DatabaseFactoryConfiguration" type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" />
   </configSections>
    <appSettings/>
   <connectionStrings>
      <add name="BaileyMDFConString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\bailey.mdf;Integrated Security=True;User Instance=True"  providerName="System.Data.SqlClient" />
    </connectionStrings>
     <DatabaseFactoryConfiguration Name="System.Data.SqlClient" ConnectionStringName="BaileyMDFConString" />
   <system.web>         
      <compilation debug="true"/>       
      <authentication mode="Windows"/>  
   </system.web>
</configuration>
15
Jon

間違った名前を使用しているか(つまり、Bailey.DataLayer.dllと呼ばれていない)、ビルド時にbinディレクトリにコピーされていません。しかし、この最後のものはありそうにないようです。

(明確にするために質問に関する私のコメントを参照してください)。

26
Andrew Rollings

わかりました...同じ問題が発生しました。上記の解決策はどれも役に立ちませんでした。私の場合、私の設定ファイルはweb.configと同じdllにありました。 configセクションから名前空間を削除しただけで、問題が修正されました。

機能していません

<configSections>
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection, ProjectName.ClientApi.Filters" requirePermission="false"/>

作業中

<configSections>
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection" requirePermission="false"/>

名前空間を削除するとすぐに, ProjectName.ClientApi.Filtersそれは働き始めました。

7
Rwiti

構成ファイルには2つのエントリが必要です。1つはカスタム構成セクションを宣言するためのconfigSections要素にあり、もう1つは実際のカスタム構成セクション自体です。両方追加しましたか?

例えば:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>

  <configSections>
    **<section name="Connections"
             type="System.Configuration.DictionarySectionHandler" />**
  </configSections>

  <Connections 
        <add key="myServer" value="serverName" />
        <add key="myPort"   value="8080" />
        <add key="myURI"    value="RequestUri" />
        <add key="UserId"   value="joebob" />
        <add key="password" value="$^%^&%$^&@%" />        
   />

</configuration>
4
Charles Bretana