Nazwa „ConfigurationManager” nie istnieje w bieżącym kontekście


468

Próbuję uzyskać dostęp connectionStringsz pliku konfiguracyjnego. Kod to ASP.NET + C #. Dodałem System.Configurationdo odniesienia, a także wspomniałem przy użyciu. Ale nadal nie zaakceptuje zgromadzenia.

Używam VSTS 2008. Masz pomysł, co może być przyczyną?

Inną dziwną rzeczą jest nazwa zestawu wyświetlana jako „System.configuration”, mała litera c, która nie jest sposobem wyświetlania nazw dla innych zestawów System.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace Utility
{
    public class CommonVariables
    {
        public static String ConnectionString
        {
            get { return ConfigurationManager.ConnectionStrings["EmployeeEntities"].ConnectionString; }
        }  
    }  
}

Konfiguracja:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="qbankEntities" connectionString="metadata=res://*/qbankModel.csdl|res://*/qbankModel.ssdl|res://*/qbankModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=localhost;Initial Catalog=qbank;Persist Security Info=True;User ID=**;Password=****;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

1
Czy możesz dodać kod? Co rozumiesz przez to, że nie zaakceptuje zgromadzenia? Czy pojawia się konkretny komunikat o błędzie?
Joshua Belden

Odpowiedzi:


820

Przestrzeń nazw jest nie tylko konieczna System.Configuration. Musisz również dodać odwołanie do zestawu System.Configuration.dll , wg

  1. Kliknij prawym przyciskiem myszy References / Zależności
  2. Wybierz Dodaj odniesienie
  3. Znajdź i dodaj System.Configuration.

To na pewno zadziała. Również dla NameValueCollectionmusisz napisać:

using System.Collections.Specialized;

1
+1 dzięki Kieran. Czy wiesz, dlaczego należy to zrobić, skoro większość innych zestawów można po prostu wywołać, dołączając instrukcję „using”?
Dhaust

13
Tak rozumiem: może być źle. Po dodaniu odwołania prosisz dll o skopiowanie do folderu bin na kompilacji / kompilacji. Niektóre pliki dll postrzegane jako rdzeń są dodawane podczas tworzenia projektu, tj. Po przejściu do pliku-> nowy projekt, tak aby w tym momencie tworzone były odniesienia. Wszystkie muszą przejść ten sam proces, tylko że niektóre są dla ciebie zrobione, a niektóre musisz zrobić ręcznie. Możesz to przetestować, usuwając odwołanie do biblioteki DLL systemu i obserwując, jak cały kod nie działa. =)
Kieran

7
OK. Zrobiłem więc trochę więcej badań i odkryłem, że powyższe jest w większości prawdą. Jednak niektóre pliki nie będą musiały być zapisywane w folderze bin podczas uruchamiania, ponieważ znajdują się one w globalnej kasecie montażowej (GAC), gdzie bin jest lokalną kasetą montażową. Jak System.dll.
Kieran

4
Przestrzeń nazw „System.Configuration” można znaleźć w bibliotece dll „System”, dlatego może być pewne drapanie głowy, gdy Intellisense akceptuje „używanie System.Configuration”; ale nie znajdzie ConfigurationManager, chyba że projekt odwołuje się do System.Configuration.dll
jaybro

99

W swoim projekcie kliknij prawym przyciskiem myszy, Dodaj odniesienie ... , na karcie .NET znajdź System.Configurationnazwę komponentu i kliknij OK.

using System.Configurationinformuje kompilator / IntelliSense, aby przeszukał w tej przestrzeni nazw wszystkie używane klasy. W przeciwnym razie będziesz musiał użyć pełnej nazwy ( System.Configuration.ConfigurationManager) za każdym razem. Ale jeśli nie dodasz odwołania, ta przestrzeń nazw / klasa nie zostanie nigdzie znaleziona.

Pamiętaj, że biblioteka DLL może mieć dowolną przestrzeń nazw, więc System.Configuration.dllteoretycznie plik może mieć przestrzeń nazw Some.Random.Name. Dla jasności / spójności są zwykle takie same, ale są wyjątki.


40

Ok .. działało po ponownym uruchomieniu VSTS. Link zaproponował rozwiązanie tego samego problemu. Chciałbym móc to wcześniej zobaczyć. :)


16
Ponad 7 lat później i wstyd, jak często jest to odpowiedź.
Przywróć Monikę Cellio

4
nie ma to jak oznaczenie własnej odpowiedzi jako odpowiedzi, gdy tak naprawdę nie jest to odpowiedź. Szkoda, że ​​mody nie mogą go edytować, aby uzyskać poprawną odpowiedź. Koleś zaznaczył własną odpowiedź na punkty ...
ggiaquin16

1
@ ggiaquin16 nie dostaniesz punktów, jeśli zaakceptujesz siebie;)
JAD

@calios lub jeśli przeczytałeś oryginalne pytanie, zobaczysz, że pytający już dodał zespół do projektu w pierwszej wersji pytania. W przypadku tego konkretnego zestawu i wersji VS konieczne było zrestartowanie IDE, inaczej błąd będzie się powtarzał. to było rozwiązanie. Dwie wysoko ocenione odpowiedzi tutaj nigdy nie miały związku z faktycznie zadawanym pytaniem, ale nie zastanawiasz się, dlaczego ktoś odpowiedziałby na pytanie, nie czytając go wcześniej. (w stylu robienia rzeczy tylko dla punktów, które w tym przypadku wydają się bardzo skuteczne ...)
ebyrob,

24

Dodanie System.Configurationodniesienia do wszystkich projektów rozwiąże ten problem.

  1. Idź do Project->Add Reference

  2. W wyświetlonym polu kliknij All assemblieskartę listy na liście po lewej stronie.

  3. Na środkowej liście przewiń System.Configurationi upewnij się, że pole jest zaznaczone.

  4. Kliknij ok, aby złożyć wniosek, a będziesz mógł uzyskać dostęp do ConfigurationManagerzajęć.


19

Dodanie tej odpowiedzi, ponieważ żadne z sugerowanych rozwiązań nie działa dla mnie.

  1. Kliknij prawym przyciskiem myszy zakładkę odniesienia, aby dodać odniesienie.
  2. Kliknij kartę Zespoły
  3. Wyszukaj „Konfiguracja systemu”
  4. Kliknij OK.

9

Jeśli otrzymujesz wiele ostrzeżeń (w moim przypadku 64 w rozwiązaniu!) Jak

CS0618: „ConfigurationSettings.AppSettings” jest przestarzały: „Ta metoda jest przestarzała, została zastąpiona przez System.Configuration! System.Configuration.ConfigurationManager.AppSettings”

ponieważ aktualizujesz starszy projekt, możesz zaoszczędzić dużo czasu w następujący sposób:

  1. Dodaj System.Configurationjako odniesienie do sekcji Referencje .
  2. Dodaj następujące dwie usinginstrukcje na górze każdego .cspliku class ( ):

    using System.Configuration; using ConfigurationSettings = System.Configuration.ConfigurationManager;

Przez tę zmianę wszystkie wystąpienia

ConfigurationSettings.AppSettings["mySetting"]

będzie teraz odwoływał się do właściwego menedżera konfiguracji, a nie już przestarzałego, a wszystkie ostrzeżenia CS0618 znikną natychmiast.

Oczywiście należy pamiętać, że jest to szybki hack. W dłuższej perspektywie należy rozważyć refaktoryzację kodu.


9

Mam lepsze rozwiązanie tego problemu configurationmanager does not exist in the current context.

Do odczytanego ciągu połączenia web.configmusimy użyć ConfigurationManagerklasy i jej metody. Jeśli chcesz użyć, musisz dodać przestrzeń nazw za pomocą System.Configuration;

Chociaż używałeś tej przestrzeni nazw, kiedy próbujesz użyć ConfigurationManagerklasy, system wyświetla błąd „menedżer konfiguracji nie istnieje w bieżącym kontekście”. By rozwiązać ten problem:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

6

Czy na pewno dodano odwołanie do zestawu .NET, a nie coś innego? Usunęłbym twoją referencję, a następnie spróbuję dodać ją ponownie, upewniając się, że wybierasz z zakładki .NET w dialogu referencyjnym Visual Studio - najnowsza wersja powinna mieć 2.0.0.0 w GAC.


Szczegóły zespołu z okna właściwości: Nazwa: Ścieżka konfiguracji System.conc: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Wersja: 2.0.0.0 Wersja wykonawcza: v2.0.50727 Coś wygląda podejrzanie? Dzięki!
pencilslate

Nie, to dokładnie tak, jak się spodziewaliśmy. To naprawdę dziwne - przepraszam, ale nigdy wcześniej tego nie widziałem. Powodzenia!
Dan Diplo,

6
  1. Kliknij Projekt prawym przyciskiem myszy
  2. Wybierz pakiet NuGet menedżera
  3. Znajdź System.Configuracja
  4. Wybierz System.Configuration.ConfigurationManager firmy Microsoft
  5. zainstalować

teraz możesz:

using System.Configuration;

4

Aby sprawdzić poprawność, spróbuj utworzyć nowy projekt aplikacji sieci Web, otwórz kod z tyłu strony Default.aspx. Dodaj wiersz w Page_Load, aby uzyskać dostęp do ciągu połączenia.

Powinien mieć domyślnie dodaną System.Configuration jako odniesienie. Powinieneś również zobaczyć instrukcję using na górze pliku kodu.

Mój kod za plikiem wygląda teraz tak i kompiluje się bez problemów.

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace WebApplication1
{
  public partial class _Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      string connString = ConfigurationManager.ConnectionStrings["MyConnectionStringName"].ConnectionString;
    }
  }
}

Zakłada się, że mam ciąg połączenia w moim pliku web.config o nazwie równej „MyConnectionStringName”, tak jak ...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
        <add name="MyConnectionStringName"
            connectionString="Data Source=.;Initial Catalog=MyDatabase;Integrated Security=True"
            providerName="System.Data.SqlClient" />
    </connectionStrings>
</configuration>

Tak, to elementarne, wiem. Ale jeśli nie masz lepszych pomysłów, czasami warto sprawdzić coś naprawdę prostego, co powinno działać.


3

Po prostu zainstaluj

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

następnie użyj

using System.Configuration;

2

Jeśli ten kod dotyczy osobnego projektu, na przykład projektu bibliotecznego. Nie zapomnij dodać odniesienia do pliku system.configuracja.


0

Ten błąd może również wystąpić, jeśli przez pomyłkę dodasz odwołanie do innego, niepowiązanego projektu. Sprawdź, czy dotyczy to Ciebie.


0

Aby rozwiązać ten problem, przejdź do Eksploratora rozwiązań. Kliknij odnośnik prawym przyciskiem myszy, kliknij Dodaj odnośnik i wybierz .net i znajdź system.configuracja, kliknij OK


0

Dodaj plik menedżera konfiguracji, aby połączyć się z bazą danych web.config

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.