Ответ 1
Либо вы используете неправильное имя (т.е. оно не называется Bailey.DataLayer.dll), либо не копируется в каталог bin при сборке. Однако этот последний не кажется вероятным.
(См. мои комментарии по вопросу о разъяснении).
Я застрял! это кажется действительно глупым, но я не вижу, где я ошибаюсь. Я создаю веб-сайт 2.0 С# 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.
У меня есть следующая инструкция using вверху страницы test.aspx.cs:
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>
Либо вы используете неправильное имя (т.е. оно не называется Bailey.DataLayer.dll), либо не копируется в каталог bin при сборке. Однако этот последний не кажется вероятным.
(См. мои комментарии по вопросу о разъяснении).
Вам нужно две записи в файле конфигурации, один - в элементе 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>
Хорошо... У меня была такая же проблема. Ни одно из вышеперечисленных решений не помогло. В моем случае мой файл конфигурации находился в той же DLL, что и в файле web.config. Я просто удалил пространство имен из раздела 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
, он начал работать.
Вы можете посмотреть http://www.primaryobjects.com/CMS/Article81.aspx, который содержит почти линию для строки, код, который вы показали выше, включая пример из файла web.config.