C#ConfigurationManager.GetSection无法加载文件或程序集

Jon*_*Jon 15 c# configurationmanager configsection

我卡住了!这看起来真的很愚蠢,但我看不出我错在哪里.我正在创建一个2.0 C#ASP.NET网站.我试图在web.config文件中使用自定义部分:

DatabaseFactorySectionHandler sectionHandler = ConfigurationManager.GetSection("DatabaseFactoryConfiguration") as DatabaseFactorySectionHandler;
Run Code Online (Sandbox Code Playgroud)

我有一个单独的DLL用于Bailey.DataLayer命名空间中的对象.但是当我运行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"
Run Code Online (Sandbox Code Playgroud)

我想要获得的课程如下:

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);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Web配置文件包含以下部分:

<configSections>
  <section name="DatabaseFactoryConfiguration" 
           type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" />
</configSections>
Run Code Online (Sandbox Code Playgroud)

我在一个控制台应用程序中完成了这个没有问题,但除了它在一个网页之外看不到任何差异.

编辑

它都在运行时编译并抛出错误,因此我只能假设它找到程序集,因为它在test.aspx.cs页面中被引用.

我在test.aspx.cs页面的顶部有以下using语句:

using Bailey.DataLayer;
Run Code Online (Sandbox Code Playgroud)

这是整个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>
Run Code Online (Sandbox Code Playgroud)

And*_*ngs 26

您使用的是错误的名称(即它不是名为Bailey.DataLayer.dll),或者它没有被复制到构建时的bin目录中.然而,这最后一个似乎不太可能.

(请参阅我对该问题的评论以澄清).

  • 谢谢安德鲁!它点击了.Web配置中未引用DLL名称.我没有意识到它是我必须放置的实际DLL,我认为它只是名称空间. (6认同)

Rwi*_*iti 7

好的......我有同样的问题.以上解决方案都没有帮助.在我的情况下,我的配置文件与web.config的dll相同.我只是从配置部分删除了命名空间,这解决了我的问题.

不工作

<configSections>
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection, ProjectName.ClientApi.Filters" requirePermission="false"/>
Run Code Online (Sandbox Code Playgroud)

工作

<configSections>
<section name="authorizedServerSection" type="ProjectName.ClientApi.Filters.AuthorizedServerSection" requirePermission="false"/>
Run Code Online (Sandbox Code Playgroud)

一旦我删除了命名空间,, ProjectName.ClientApi.Filters它就开始工作了.