Nie można zainicjować systemu konfiguracji

225

Jestem nowy w Visual Studio. Obecnie tworzę formularz logowania.

Mam ten kod.

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);
}

Ale ilekroć próbuję wpisać nazwę użytkownika i hasło, pojawia się błąd o nazwie Inicjalizacja systemu konfiguracji nie powiodła się . Zastanawiam się tylko, co to za problem i jak mogę to rozwiązać?

Proszę pomóż.

Sean
źródło
2
Kolejny scenariusz - jeśli szukasz ConfigurationManager.Appsettings [""], upewnij się, że <appSettings> jest obecny w konfiguracji. W przeciwnym razie otrzymasz ten wyjątek
LCJ
1
Może się to również zdarzyć, jeśli masz 2 lokalizacje dla ustawień
Lawrence Thurman

Odpowiedzi:

392

Upewnij się, że plik konfiguracyjny (web.config, jeśli web lub app.config, jeśli Windows) w twoim projekcie zaczyna się jako:

<?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>

Zauważ, że wewnątrz configurationelementu pierwsze dziecko musi być configSectionselementem.

Upewnij się, że we namewłaściwości na sectionelemencie zastąpiono YourProjectNamerzeczywistą nazwą projektu.

Zdarzyło mi się, że utworzyłem serwis internetowy w projekcie biblioteki klas, a następnie skopiowałem (nadpisałem) plik konfiguracyjny (w celu dostosowania konfiguracji punktów końcowych) do mojej aplikacji Windows i zacząłem mieć ten sam problem. Nieumyślnie usunąłem configSections.

działało dla mnie, mam nadzieję, że to pomaga

feluco79
źródło
79
„wewnątrz elementu„ konfiguracja ”pierwsze dziecko musi być elementem„ configSections ”” << To był dla mnie kluczowy punkt. Dzięki.
demoncodemonkey
7
Kolejny scenariusz - jeśli szukasz ConfigurationManager.Appsettings [""], upewnij się, że <appSettings> jest obecny w konfiguracji. W przeciwnym razie otrzymasz ten wyjątek
LCJ
6
Naprawiono problem, w którym configSectionsistniał element, ale znajdował się on później w części app.config. Nie mogę się powstrzymać od pytania, dlaczego wystąpił ten błąd. Myślałem, że elementów XML nie trzeba zamawiać.
Tae-Sung Shin
3
To jest poprawne. ConfigSections powinien być pierwszym węzłem potomnym w elemencie konfiguracji.
Umang Desai,
7
Sposób, w jaki Microsoft zaimplementował tę aplikację. Konfiguracja jest opóźniony !!! Mogli przynajmniej rzucić lepszy komunikat o błędzie!
codenamezero
105

Usuń stare pliki konfiguracyjne z c: \ Users \ nazwa użytkownika \ AppData \ Local \ appname oraz c: \ Users \ nazwa użytkownika \ AppData \ Roaming \ nazwa aplikacji, a następnie spróbuj ponownie uruchomić aplikację.

jarek
źródło
2
Dzięki, pracuję. Ale nadal nie rozumiem, na czym polega problem?
upłynnienie
1
w folderze lokalnym plik user.config był pusty. Po usunięciu aplikacji folderu lokalnego zacznij działać
Ozgur
3
Dzięki, działało. Ale co może być przyczyną tego błędu.
vasuy19
1
Mój plik został wypełniony małymi wartościami (0x00). Skopiowałem działający i wtedy było w porządku
DanW
1
Mój plik konfiguracyjny w tej lokalizacji został uszkodzony podczas awarii zasilania - plik konfiguracyjny, który jest zwykle XML, został wypełniony bajtami NUL
mroselli,
19

Czasami występuje błąd, ponieważ okna tworzą duplikat w pliku

C: \ Users \ App Data \ Local \ "You App Name" ...

Po prostu usuń ten folder i gotowe. Spróbuj.

Ashu Gupta
źródło
2
DZIĘKUJĘ CI. Nie mogłem rozwiązać problemu z ciągami plików ustawień, które nie były „odbierane” przez moją aplikację. Wyczyściłem pliki konfiguracyjne, ponownie wygenerowałem plik .suo, usunąłem wszystkie istniejące pliki .settings i nadal nie mogłem załadować z żadnego nowego pliku ustawień, ale nie otrzymałem żadnych błędów podczas kompilacji. Ten koszmar w końcu dobiegł końca.
Rachael,
13

Jeśli dodałeś własne sekcje konfiguracji do swojego App.Config, upewnij się, że zdefiniowałeś sekcję w <configSections>elemencie. Dodałem plik XML konfiguracji, ale zapomniałem zadeklarować sekcję konfiguracji do góry - co spowodowało dla mnie wyjątek „Nie można zainicjować systemu konfiguracji”.

Flash Gordon
źródło
3
Ponadto - jeśli masz sekcję zadeklarowaną do góry, a nazwa w sekcji poniżej zawiera literówkę, otrzymasz ten błąd. Jeśli spojrzysz na wyjątek wewnętrzny zgłoszonego wyjątku, dowiesz się, która sekcja stanowi problem.
shindigo
6

Miałem ten sam problem z klasą MSTest: Marlon Grech w swoim artykule mówi „element musi być zdefiniowany jako pierwszy element w App.config”.

Upewnij się więc, że jest to pierwszy element pod elementem. Najpierw umieściłem AppSettings.

Wyrównany
źródło
ohh .. mój zły: rzeczywiście to zrobiłeś, ale nie zauważyłem ;-) Dzięki za wyjaśnienie
kleopatra
4

Wiem, że już na to odpowiedziano, ale miałem dokładnie ten sam problem w testach jednostkowych. Oderwałem włosy - dodałem sekcję AppSettings, a następnie zadeklarowałem sekcję konfiguracji zgodnie z odpowiedzią. W końcu dowiedziałem się, że zadeklarowałem już sekcję appSettings w górę mojego pliku konfiguracyjnego. Obie sekcje wskazywały na mój plik ustawień zewnętrznych „appSettings.config”, ale pierwszy element appSettings korzystał z pliku atrybutów , podczas gdy drugi używał atrybutu configSource . Wiem, że pytanie dotyczyło połączeniaStrings. Rzeczywiście dzieje się tak, jeśli element appSettings jest elementem connectionStrings powielanym z różnymi atrybutami.

Mam nadzieję, że może to zapewnić komuś rozwiązanie, zanim pójdzie ścieżką, którą zrobiłem, co prowadzi do marnowania godziny lub dwóch. westchnij o życiu naszych programistów. Kilka dni marnujemy więcej na debugowanie niż na rozwój!

csharpforevermore
źródło
Bingo Miałem appSettingsi applicationSettingsoba.
SushiGuy
3

Problem ten zacząłem pojawiać się po odinstalowaniu sterowników klienta Oracle i usunąłem go C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ machine.config !

Skopiowanie go z innego komputera rozwiązało problem.

Jeremy Thompson
źródło
3
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="xyz" value="123" />    
  </appSettings>
</configuration>
Lenin Edwin
źródło
3

Jeśli masz ustawienia o zasięgu użytkownika, w [Userfolder]\AppData\Local\[ProjectName]folderze może znajdować się plik user.config .

Jeśli później usuniesz ustawienia o zasięgu użytkownika, plik user.config nie zostanie automatycznie usunięty, a jego obecność może spowodować ten sam komunikat o błędzie. Usunięcie folderu załatwiło sprawę.

Wuolennaj
źródło
1

Wow, zajęło mi to wieczność, aby to rozgryźć. Z jakiegoś powodu zmiana atrybutu[assembly: AssemblyCompany("CompanyName")] at AssemblyInfo.cssprawiła, że ​​ten błąd zniknął. Odwoływałem się do projektu, który miał inną wartość atrybutu [assembly: AssemblyCompany("CompanyName")]. Upewniłem się, że oba projekty mają tę samą wartość atrybutu i działa świetnie!

Tono Nam
źródło
Czy to błąd? Trudno oczekiwać, aby nazwa Twojej firmy pasowała do projektu strony trzeciej, do którego się odwołujesz.
Denise Skidmore
1

Ten sam problem ze mną Rozwiązałem mój problem, usuwając verion = "v3.5" z App.config.

Przed

 <?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>

Rozwiązanie

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

  <startup>

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

Oto jak używać wersji na

Element wykonawczy obsługi MSDN


źródło
1

Po długim wyszukiwaniu, które zdałem sobie sprawę, ten wyjątek ma wewnętrzny wyjątek, który mówi dokładnie, co jest nie tak z plikiem konfiguracyjnym

Gerrie Pretorius
źródło
Próbowałem skomentować różne sekcje mojego app.config i na wyjątek nawet nie spojrzał na wewnętrzny wyjątek. Po obejrzeniu tej odpowiedzi znalazłem problem. Dzięki.
Sid
0

Warto zauważyć, że jeśli dodasz do app.config rzeczy takie jak parametry połączenia, że ​​jeśli dodasz elementy poza zdefiniowane sekcje konfiguracji, nie będzie to natychmiast narzekać, ale kiedy spróbujesz uzyskać do nich dostęp, możesz uzyskać powyższe błędy.

Zwiń wszystkie główne sekcje i upewnij się, że nie ma żadnych elementów poza zdefiniowanymi. Oczywiście, kiedy to zauważyłeś.

Anthony Horne
źródło
0

W moim przypadku jedynym rozwiązaniem było dodanie odniesienia do projektu System.Configurationw moim teście.

Jose Santos
źródło
0

To trochę głupie, ale dla mnie to naprawiłem, wykonując najnowszą kontrolę źródła w moim kodzie. Myślę, że ktoś inny dodał nowy element konfiguracji i musiałem zastąpić moje pliki konfiguracyjne. OP pokazuje błąd, który popełniłem, co tak naprawdę nie wskazywało mi właściwego kierunku.

DL
źródło
0

Ja też napotkałem ten sam problem, ale przypadkowo napisałem bez pisania, poprzedni powinien wejść do tych tagów. dlatego pojawił się błąd „Inicjalizacja systemu konfiguracji nie powiodła się”. Mam nadzieję, że to pomoże

Priyabrata biswal
źródło
0

W moim przypadku mam dwie konfiguracje w pliku app.config. Po usunięciu ukrytego w wierszach kodu aplikacja działa poprawnie.

Jeśli więc ktoś ma ten sam problem, najpierw sprawdź, czy masz zduplikowane konfiguracje.

oopsdazie
źródło
0

Jeśli masz do czynienia z zadaniem Azure WebJob - musiałem usunąć następujące elementy po aktualizacji do najnowszej wersji 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>

Mam nadzieję że to pomoże.

Dave Friedel
źródło
0

W moim przypadku w pliku .edmx uruchomiłem polecenie „Aktualizuj model z bazy danych”. To polecenie dodało niepotrzebny ciąg połączenia do mojego pliku app.config. Usunąłem ciąg połączenia i wszystko znów było dobrze.

Colin
źródło
0

Rozwiązałem problem za pomocą poniższego kodu

   <?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>
Sumant Singh
źródło
0

Spróbuj zapisać plik .config jako utf-8, jeśli masz w nim jakieś znaki „specjalne”. To był problem w moim przypadku aplikacji konsoli.

lukalev
źródło
0

Jak wspomniał @Flash Gordon w swoim komentarzu, musisz zdefiniować dowolny niestandardowy znacznik (jako sekcję) w pliku App.config , pod <configSections>. Na przykład pracujesz nad projektem automatyzacji testów za pomocą SpecFlow i dodajesz <specFlow>znacznik, wtedy najprostsza wersja App.config będzie wyglądać następująco: wprowadź opis zdjęcia tutaj

DenisD
źródło
0

Właśnie to miałem, a to dlatego, że miałem <configuration>element zagnieżdżony wewnątrz <configuration>elementu.

Mike Cheel
źródło
0

Zrestartowałem Visual Studio, a nawet cały komputer. Wyczyściłem projekt, przebudowałem i usunąłem plik bin.

Nic nie pomogło, dopóki nie zmieniłem konfiguracji z x64 na x86. Działa na x86, ale kiedy go zmieniłem, działało!

Ali123
źródło
0

Wypróbowałem wszystkie powyższe rozwiązania, próbując dowiedzieć się, dlaczego w jednym z moich testów jednostkowych nie udało się pobrać konfiguracji z pliku app.config, który jest idealny.

Miałem 2 odniesienia do tego samego zestawu, tak:

zduplikowane odniesienie

plik projektu przed i po

Usunięcie (duplikatu) odniesienia na żółto naprawiło to dla mnie.

Mam nadzieję, że to zadziała dla kogoś innego i doprowadziło mnie to do szału.

ElMatador
źródło
0

Proste rozwiązanie dla projektów .Net Core WinForms / WPF / .Net Standard Class Library

krok 1: Zainstaluj System.Configuration.ConfigurationManagerprzez Nuget Manager

krok 2: Dodaj nowy App.Configplik

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

krok 3: Uzyskaj wartość

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

Jeśli dzwonisz z niego, a Class Librarynastępnie dodaj App.Configplik do głównego projektu.

fatihyildizhan
źródło
0

Jeśli masz sekcję niestandardową, musisz wspomnieć, że w configSections tuż pod tagiem konfiguracyjnym.

Sprawdź swoje pliki transformacji, upewnij się, że usunąłeś niepotrzebne znaczniki. Tylko pliki, które będą się różnić, muszą znajdować się w plikach transformacji. nie wspominaj o sekcji konfiguracji w plikach transformacji, jeśli nie są potrzebne. to również spowodowałoby problem.

jeśli masz jakiś błąd składniowy w machine.config, to również ten błąd jest oczekiwany.

ekstraktor
źródło