Не вдалося ініціалізувати систему конфігурації


225

Я новачок у Visual Studio. Зараз я створюю форму для входу.

У мене цей код.

string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
try
{
    using (OdbcConnection connect = new OdbcConnection(connectionString))
    {
        connect.Open();
        OdbcCommand cmd = new OdbcCommand("SELECT username, password FROM receptionist", connect);
        OdbcDataReader reader = cmd.ExecuteReader();

        if (username_login.Text == username && password_login.Text == password)
        {
            this.Hide();
            MessageBox.Show("Invalid User", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            this.Close();
        }
        else 
            MessageBox.Show("Invalid User", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        connect.Close();
    }
}
catch (OdbcException ex)
{
    MessageBox.Show(ex.Message, "error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

Але кожного разу, коли я намагаюся ввести ім'я користувача та пароль, виникає помилка Система конфігурації не вдалося ініціалізувати . Мені просто цікаво, що це за проблема і як я можу це вирішити?

Будь ласка, допоможіть.



2
Ще один сценарій - якщо ви шукаєте ConfigurationManager.Appsettings [""], переконайтеся, що в налаштуваннях присутній <appSettings>. Інакше ви отримаєте цей виняток
LCJ

1
Це також може статися, якщо у вас є 2 локації для додатків
Lawrence Thurman,

Відповіді:


392

Переконайтеся, що ваш конфігураційний файл (web.config, якщо web, або app.config, якщо Windows) у вашому проекті починається як:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" 
                      type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

            <section name="YourProjectName.Properties.Settings" 
                     type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
                     requirePermission="false" />

        </sectionGroup>
    </configSections>
</configuration>

Зауважте, що всередині configurationелемента першою дочірньою ланкою повинен бути той самийconfigSections елемент елементом.

У nameвластивості на sectionелементі переконайтесь, що ви замінили YourProjectNameім'я власного проекту.

Мені сталося, що я створив веб-сервіс у проекті бібліотеки класів, потім скопіював (перезаписав) конфігураційний файл (щоб привести конфігурацію кінцевих точок) у свій додаток Windows, і у мене почалася така ж проблема. Мене ненароком видалили configSections.

це працювало на мене, сподіваюся, що це допомагає


79
"всередині елемента" конфігурація "першим дочірнім повинен бути елемент" configSections "" << це було для мене вирішальним моментом. Дякую.
demoncodemonkey

7
Ще один сценарій - якщо ви шукаєте ConfigurationManager.Appsettings [""], переконайтеся, що в налаштуваннях присутній <appSettings>. Інакше ви отримаєте цей виняток
LCJ

6
Він вирішив мою проблему там, де configSectionsелемент існував, але розташований пізніше в частині app.config. Я не можу не запитати, чому сталася ця помилка. Я думав, що XML-елементи не потрібно замовляти.
Tae-Sung Shin

3
Це вірно. ConfSections повинен бути першим дочірнім вузлом під, елементом конфігурації.
Umang Desai

7
Те, як Microsoft реалізувала цю програму app.config, відстає !!! Найменше, що вони могли зробити - це кинути краще повідомлення про помилку!
codenamezero

105

Видаліть старі файли конфігурації з c: \ Users \ username \ AppData \ Local \ appname та c: \ Users \ username \ AppData \ Roaming \ appname, а потім спробуйте перезапустити програму.


2
Спасибі, працюючи. Але я все ще не розумію, в чому проблема?
ліквідувати

1
під локальною папкою файл user.config був порожнім. Після видалення програми локальної папки почніть працювати
Ozgur

3
Спасибі це спрацювало. Але що може бути причиною цієї помилки.
vasuy19

1
Мій файл був заповнений низькими значеннями (0x00). Я скопіював робочий, і тоді все було добре
DanW

1
Мій конфігураційний файл у цьому місці був пошкоджений під час події відключення живлення - конфігураційний файл, як правило, XML був заповнений байтами NUL
mroselli

19

Іноді Помилка виникає через те, що Windows створює дублікат у

C: \ Користувачі \ Дані програми \ Місцеві \ "Ви назва програми" ...

Просто видаліть цю папку і готово. Спробуй це.


2
СПАСИБІ. Мені не вдалося виправити свою проблему, коли рядки файлів налаштувань не "підбиралися" моєю програмою. Я очистив конфігураційні файли, відновив .suo-файл, видалив усі існуючі файли .settings і досі не зміг завантажити будь-який новий файл налаштувань, але не отримав помилок при складанні. Цей кошмар нарешті закінчився.
Rachael

13

Якщо ви додали власні розділи конфігурації до своїх App.Config, переконайтеся, що ви вказали розділ у <configSections>елементі. Я додав свій конфігураційний XML, але забув оголосити розділ конфігурації зверху - що спричинило для мене виняток "Система конфігурації не вдалося ініціалізувати".


3
Також - якщо у вас є розділ, оголошений вгорі, а назва в розділі нижче має помилку друку, ви отримаєте цю помилку. Якщо ви подивитесь на InnerException викинутого винятку, він підкаже, у якому розділі проблема.
шиндиго

6

У мене була така сама проблема з класом MSTest: Марлон Греч у своїй статті говорить, що "елемент повинен бути визначений як перший елемент у App.config".

Тому переконайтеся, що це перший елемент під елементом. Я поставив AppSettings першим.


ой .. мій поганий: ти справді зробив, але я не помітив ;-) Дякую за уточнення
kleopatra

4

Я знаю, що на це вже відповіли, але в моїх тестових одиницях була точно така ж проблема. Я виривав волосся - додав розділ Налаштування додатків, а потім оголосив розділ конфігурації відповідно до відповіді. Нарешті з’ясував, що я вже оголосив розділ Налаштування додатків, надалі працюючи над своїм файлом конфігурацій. Обидва розділи вказували на мій зовнішній файл налаштувань "appSettings.config", але перший елемент appSettings використовує файл атрибутів, а другий використовує атрибут configSource . Я знаю, питання стосувалося з'єднанняСтрингів. Звичайно, це станеться, якщо елемент appSettings - це елемент connectionStrings, який дублюється з різними атрибутами.

Сподіваємось, це може надати комусь іншому рішення до того, як вони пітимуть по шляху, який я пройшов, і це призведе до того, щоб витратити годину чи дві. зітхайте о життя нас розробників. Ми витрачаємо більше годин на налагодження, ніж ми витрачаємо на розробку!


Бінго. Мав appSettingsі те, і applicationSettingsінше.
SushiGuy

3

Я почав отримувати цю проблему після видалення драйверів Oracle Client, і це видалило мою C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ machine.config !

Копіюючи його з іншого комп’ютера, вирішено проблему.



3

Якщо у вас є налаштування масштабування користувача, у вас також може бути файл user.config десь у [Userfolder]\AppData\Local\[ProjectName]папці.

Якщо пізніше вилучите налаштування, що визначаються користувачем, user.config не буде автоматично видалений, і його наявність може спричинити те саме повідомлення про помилку. Видалення папки зробило для мене трюк.


1

Нічого собі, мені було вічно розібратися в цьому. Чомусь зміна атрибуту [assembly: AssemblyCompany("CompanyName")]при AssemblyInfo.csцьому зробила цю помилку зниклою. Я посилався на проект, який мав інше значення для атрибута [assembly: AssemblyCompany("CompanyName")]. Я впевнився, що обидва проекти мають однакове значення атрибуту, і це чудово працювало!


Це помилка? Навряд чи можна очікувати, що ім’я вашої компанії буде відповідати третьому проекту, про який ви посилаєтесь.
Деніз Скідмор

1

Та сама проблема зі мною я вирішив свою проблему, видаливши verion = "v3.5" з App.config.

До цього

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

  <startup>

 <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
 </startup>
 <supportedRuntime version="v3.5" />//Remove this
</configuration>

Рішення

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

  <startup>

    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
  </startup>
  </configuration>

Ось як використовувати версію на

Елемент виконання MSDN


1

Після тривалого пошуку, який я зрозумів, цей виняток має внутрішній виняток, який точно повідомляє вам, що не так з вашим файлом конфігурації


Я намагався коментувати-відмінювати різні розділи мого app.config і, за винятком, навіть не дивився на внутрішнє виключення. І побачивши цю відповідь, я виявив, у чому питання. Дякую.
Сид

0

Варто зазначити, що якщо ви додасте такі речі, як рядки з'єднання в app.config, що якщо ви додасте елементи за межами визначених розділів конфігурації, він не одразу скаржиться, але коли ви спробуєте отримати доступ до нього, ви можете отримати вищеописані помилки.

Згорніть всі основні розділи та переконайтеся, що немає предметів поза визначеними. Очевидно, коли ви насправді це помітили.


0

У моєму випадку єдиним рішенням було також додати посилання до System.Configurationсвого тестового проекту.


0

Це начебто нерозумно, але для мене я це виправив, зробивши останню інформацію про контроль джерела свого коду. Я думаю, що був якийсь новий елемент конфігурації, який додав хтось інший, і мені потрібно було перезаписати свої конфігураційні файли. ОП показує помилку, яку я отримав, що насправді не спрямовувало мене в правильному напрямку.


0

Я теж зіткнувся з тією ж проблемою, але випадково я написав, не пишучи, попередній повинен зайти всередину цього тегу. таким чином, виникла помилка "Система конфігурації, яку не вдалося ініціалізувати". Сподіваюся, це допоможе


0

У моєму випадку я маю дві конфігурації у файлі app.config. Після видалення того, хто ховається в кодових рядках, додаток працює чудово.

Тож у когось така ж проблема, перевірте, чи є у вас дублікати конфігурацій спочатку.


0

Якщо ви маєте справу з Azure WebJob - мені довелося видалити наступне після оновлення до останнього 4.6.1.

  <compilation debug="true" targetFramework="4.6.1">
    <assemblies>
      <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </assemblies>
  </compilation>

Сподіваюсь, це допомагає.


0

У моєму випадку в моєму файлі .edmx я запустив команду "Оновити модель з бази даних". Ця команда додала зайвий рядок з'єднання до мого файлу app.config. Я видалив цей рядок з'єднання і знову все було добре.


0

Я вирішив проблему, використовуючи наведений нижче код

   <?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <sectionGroup name="applicationSettings"
                  type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

      <section name="YourProjectName.Properties.Settings"
               type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
               requirePermission="false" />

    </sectionGroup>

  </configSections>
  <appSettings>
    <add key="SPUserName" value="TestUser" />
    <add key="SPPassword" value="UserPWD" />
  </appSettings>
</configuration>

0

Спробуйте зберегти .config файл як utf-8, якщо у вас є якісь "спеціальні" символи. Це було проблемою в моєму випадку консольного застосування.


0

Як згадував @Flash Gordon у своєму коментарі, вам потрібно буде визначити будь-який спеціальний тег (як розділ) у вашому файлі App.config , під <configSections>. Наприклад, ви працюєте над проектом автоматизованого тестування з SpecFlow & add <specFlow>tag, тоді найпростіша версія App.config виглядатиме так: введіть тут опис зображення


0

У мене це було, і це було тому, що в мене був <configuration>елемент, вкладений всередину <configuration>елемента.


0

Я перезапустив Visual studio і навіть весь ПК. Я очистив проект, відновив і видалив файл бін.

Ніщо не допомогло, поки я не змінив конфігурацію з x64 на x86. Він працював на x86, але коли я змінив його, він також працював!


0

Я спробував усі рішення вище, намагаючись з’ясувати, чому в одному з моїх тестових модулів не вдалося зібрати конфігурацію з ідеального файлу app.config.

У мене було 2 посилання на цю ж збірку, як так:

дублікат посилання

файл проекту до і після

Видалення (дубліката) посилання жовтим кольором зафіксувало це для мене.

Я сподіваюсь, що це працює для когось іншого, це мене на деякий час ганяло.


0

Просте рішення для проектів .Net Core WinForms / WPF / .Net Standard Library Library

крок 1: Встановлення System.Configuration.ConfigurationManagerNuget Manager

крок 2: Додайте новий App.Configфайл

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="Bodrum" value="Yalikavak" />    
  </appSettings>
</configuration>

step3: Отримайте значення

string value = ConfigurationManager.AppSettings.Get("Bodrum");
// value is Yalikavak

Якщо ви телефонуєте з Class Libraryцього пункту, тоді додайте App.Configфайл у своєму головному проекті.


0

Якщо у вас є спеціальний розділ, вам потрібно згадати, що під configSections право під тегом конфігурацій.

Перевірте свої файли перетворення, переконайтесь, що ви видалили непотрібні теги. Тільки розділ, який буде змінюватись, повинен бути у файлах перетворення. не згадуйте розділ конфігурації у файлах перетворення, якщо вони не потрібні. це також спричинило б проблему.

якщо у вас є будь-які синтаксичні помилки в machine.config, тоді також очікується ця помилка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.