App.config - настраиваемый раздел не работает

Недавно я начал создавать консольную версию веб-приложения. Я скопировал свои настраиваемые разделы из файла web.config. в мой app.config. Когда я иду за информацией о конфигурации, я получаю эту ошибку:

Произошла ошибка при создании обработчика раздела конфигурации для x / y: не удалось загрузить тип x из сборки System.Configuration

Строка, которая ему не нравится:

вернуть ConfigurationManager.GetSection ("X / Y") как Z;

Кто-нибудь сталкивался с чем-то подобным?

Я смог добавить

<add key = "IsReadable" value = "0"/> 

в appSettings и прочтите.

Добавление:

Я действительно определил это в настраиваемом разделе:

  <configSections>
    <sectionGroup name = "x">
      <section name = "y" type = "zzzzz"/>
    </sectionGroup>

  </configSections>
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
7 290
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

похоже, что ваш обработчик раздела конфигурации не определен

<configSection>
    <section
            name = "YOUR_CLASS_NAME_HERE"
            type = "YOUR.NAMESPACE.CLASSNAME, YOUR.NAMESPACE, Version=1.1.0.0, Culture=neutral, PublicKeyToken=PUBLIC_TOKEN_ID_FROM_ASSEMBLY"
            allowLocation = "true"
            allowDefinition = "Everywhere"
          />
</configSection>

Какая часть этого типа раздела требуется?

Brian G 20.11.2008 23:39

Для решения вашей проблемы не требуются Culture и PublicKey. Посмотрите мою короткую версию ниже.

Patrick Desjardins 20.11.2008 23:40

@Daok: Я просто выполнял приказы! ;-)

Steven A. Lowe 20.11.2008 23:47

Если вам нужен пользовательский обработчик конфигурации, вы должны определить класс и ссылаться на него, как показано Стивеном Лоу. Вы можете наследовать от предопределенных обработчиков, или вы можете просто использовать пару значение / ключ, которая предлагается в разделе appSetting, как вы отметили.

В верхней части файла вам необходимо иметь тег configSection внутри раздела.

У вас тоже может быть sectionGroup. Пример:

<configuration>
   <configSections>
     <sectionGroup name = "x">
       <section name = "y" type = "a, b"/>
     </sectionGroup>
    <configSections>
</configuration>

Этот класс работает как общий обработчик настраиваемого раздела конфигурации для любого типа ...

public class XmlConfigurator : IConfigurationSectionHandler
    {
        public object Create(object parent, object configContext, XmlNode section)
        {
            if (section == null) return null;
            Type sectionType = Type.GetType((string)(section.CreateNavigator()).Evaluate("string(@configType)"));
            XmlSerializer xs = new XmlSerializer(sectionType);
            return xs.Deserialize(new XmlNodeReader(section));
        }
    }

В вашем app.config добавьте

  <section name = "NameofConfigSection"  type = "NameSpace.XmlConfigurator, NameSpace.Assembly"/>

И в элементе раздела конфигурации добавьте атрибут, чтобы указать тип, в который вы хотите десериализовать корневой элемент.

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

<NameofConfigSection configType = "NameSpace.NameofTypeToDeserializeInto, Namespace.Assembly" >

 ... 

</NameofConfigSection>

IConfigurationSectionHandler устарел в .NET 2.0 и более поздних версиях. Вместо этого наследуйте от ConfigurationSection.

M. Dudley 25.06.2009 22:47

Но, насколько я понимаю, вы не можете дублировать функциональность, которую предоставляет приведенный выше код (то есть возможность десериализовать ЛЮБОЙ раздел конфигурации с одним и тем же «универсальным» обработчиком), используя более новую методологию ... Используя ConfigurationSection, вам нужно написать новый производный класс для каждого нового раздела конфигурации, который вы хотите десериализовать ...

Charles Bretana 26.06.2009 17:35

Недавно у меня была такая же проблема. Я создал настраиваемую группу разделов для веб-приложения (работала нормально), но когда я перенес этот слой в консольное приложение, группа разделов не работала.

Вы правильно ответили на свой вопрос относительно того, какая часть «типа» требуется в вашем определении раздела. Я изменил ваш раздел конфигурации следующим примером:

<configSection>
    <section
        name = "yourClassName"
        type = "your.namespace.className, your.assembly"
        allowLocation = "true"
        allowDefinition = "Everywhere" />
</configSection>

Вы заметите, что у типа теперь есть имя класса, за которым следует имя сборки. Это необходимо для взаимодействия вне веб-среды.

ПРИМЕЧАНИЕ. Имя сборки не обязательно совпадает с вашим пространством имен (для данного раздела).

Другие вопросы по теме