我被卡住了!这看起来真的很愚蠢,但我看不出我错在哪里。我正在创建一个2.0 C#ASP.NET网站。我试图在web.config文件中使用自定义部分:
DatabaseFactorySectionHandler sectionHandler = ConfigurationManager.GetSection("DatabaseFactoryConfiguration") as DatabaseFactorySectionHandler;
我有一个单独的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"
我想要的课程如下:
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);
}
}
}
}
}
网络配置文件包含以下部分:
<configSections>
<section name="DatabaseFactoryConfiguration"
type="Bailey.DataLayer.DatabaseFactorySectionHandler, Bailey.DataLayer" />
</configSections>
我在控制台应用程序中完成了这项工作,没有任何问题,但除了在网页中之外,看不出任何差异。
修改
这一切都在运行时编译并抛出错误,因此我只能假设它找到了程序集,因为它在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>
答案 0 :(得分:25)
您使用的是错误的名称(即它不是名为Bailey.DataLayer.dll),或者它没有被复制到构建时的bin目录中。然而,这最后一个似乎不太可能。
(请参阅我对该问题的评论以澄清)。
答案 1 :(得分:6)
好的......我有同样的问题。以上解决方案都没有帮助。 在我的情况下,我的配置文件与web.config的dll相同。我只是从配置部分删除了命名空间,这解决了我的问题。
无效
<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
,它就开始工作了。
答案 2 :(得分:4)
配置文件中需要两个条目,一个在configSections元素上,用于声明自定义配置节,另一个用于实际的自定义配置节本身。你加了两个吗?
例如:
<?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>
答案 3 :(得分:-1)
您可能需要查看http://www.primaryobjects.com/CMS/Article81.aspx,其中包含上面显示的代码,几乎是一行代码,包括web.config文件中的示例。