Der Name 'ConfigurationManager' existiert im aktuellen Kontext nicht

468

Ich versuche zuzugreifen connectionStrings über die Konfigurationsdatei . Der Code lautet ASP.NET + C #. Ich habe System.Configurationzur Referenz hinzugefügt und auch mit der Verwendung erwähnt. Trotzdem würde es die Versammlung nicht akzeptieren.

Ich verwende VSTS 2008. Irgendeine Idee, was der Grund sein könnte?

Eine andere seltsame Sache ist der Assemblyname, der als "System.configuration" angezeigt wird, ein Kleinbuchstabe c, mit dem Namen für andere Systemassemblys nicht angezeigt werden.

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

Konfiguration:

<?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>
Bleistiftscheibe
quelle
1
Können Sie Code hinzufügen? Was meinst du damit, dass es die Versammlung nicht akzeptieren würde? Erhalten Sie eine bestimmte Fehlermeldung?
Joshua Belden

Antworten:

820

Es ist nicht nur notwendig, den Namespace zu verwenden System.Configuration . Sie müssen auch den Verweis auf die Baugruppe hinzufügen System.Configuration.dll, indem Sie

  1. Klicken Sie mit der rechten Maustaste auf die Referenzen / Abhängigkeiten
  2. Wählen Sie Referenz hinzufügen
  3. Suchen und hinzufügen System.Configuration.

Dies wird sicher funktionieren. Auch für die muss NameValueCollectionman schreiben:

using System.Collections.Specialized;
Kieran
quelle
1
+1 Danke Kieran. Wissen Sie, warum dies getan werden muss, wenn die meisten anderen Assemblys einfach durch Einfügen der Anweisung 'using' aufgerufen werden können?
Auspuff
13
Dies ist mein Verständnis: Es kann falsch sein. Wenn Sie die Referenz hinzufügen, fordern Sie die DLL auf, beim Kompilieren / Erstellen in den Ordner bin kopiert zu werden. Einige DLLs, die als Kern angesehen werden, werden hinzugefügt, wenn das Projekt erstellt wird, dh wenn Sie Datei-> neues Projekt aufrufen, damit die Referenzen an diesem Punkt eingerichtet werden. Sie müssen alle den gleichen Prozess durchlaufen, nur dass einige für Sie erledigt sind und andere manuell. Sie können es testen, indem Sie den Verweis auf Ihre System-DLL löschen und beobachten, wie Ihr gesamter Code fehlschlägt. =)
Kieran
7
OK. Also habe ich ein bisschen mehr recherchiert und festgestellt, dass das oben Gesagte größtenteils zutrifft. Einige der Dateien müssen jedoch beim Ausführen nicht in den Ordner bin geschrieben werden, da sie sich im globalen Assembly-Cashe (GAC) befinden, in dem bin ein lokaler Assembly-Cashe ist. Wie die System.dll.
Kieran
4
Der Namespace 'System.Configuration' befindet sich in der DLL 'System'. Aus diesem Grund kann es zu Kopfkratzern kommen, wenn Intellisense die Option 'using System.Configuration' akzeptiert. ConfigurationManager wird jedoch nur gefunden, wenn das Projekt auf die System.Configuration.dll verweist.
Jaybro
99

Klicken Sie in Ihrem Projekt mit der rechten Maustaste auf Referenz hinzufügen ... , suchen Sie auf der Registerkarte .NET den System.ConfigurationKomponentennamen und klicken Sie auf OK.

using System.ConfigurationWeist den Compiler / IntelliSense an, in diesem Namespace nach Klassen zu suchen, die Sie verwenden. Andernfalls müssten Sie System.Configuration.ConfigurationManagerjedes Mal den vollständigen Namen ( ) verwenden. Wenn Sie die Referenz jedoch nicht hinzufügen, wird dieser Namespace / diese Klasse nirgendwo gefunden.

Beachten Sie, dass eine DLL einen beliebigen Namespace haben kann, sodass die Datei System.Configuration.dlltheoretisch den Namespace haben kann Some.Random.Name. Aus Gründen der Klarheit / Konsistenz sind sie normalerweise gleich, es gibt jedoch Ausnahmen.

Rameez
quelle
40

Ok .. es hat nach dem Neustart des VSTS funktioniert. Der Link schlug die Lösung für das gleiche Problem vor. Ich wünschte, ich hätte es schon einmal gesehen. :) :)

Bleistiftscheibe
quelle
16
Über 7 Jahre später und es ist immer noch eine Schande, wie oft dies die Antwort ist.
Stellen Sie Monica Cellio
4
Nichts geht über das Markieren Ihrer eigenen Antwort als Antwort, wenn dies tatsächlich nicht die Antwort ist. Schade, dass Mods es nicht bearbeiten können, um die richtige Antwort zu erhalten. Dude markierte seine eigene Antwort für Punkte ....
ggiaquin16
1
@ ggiaquin16 Sie bekommen die Punkte nicht, wenn Sie sich akzeptieren;)
JAD
@calios oder wenn Sie die ursprüngliche Frage lesen, können Sie sehen, dass der Fragesteller die Baugruppe bereits in der ersten Version der Frage zum Projekt hinzugefügt hat. Für diese bestimmte Assembly und Version von VS musste die IDE neu gestartet werden, sonst trat der Fehler einfach weiter auf. das war die lösung. Die beiden hoch bewerteten Antworten hier waren nie relevant für die tatsächlich gestellte Frage, aber Sie fragen sich nicht, warum jemand eine Frage beantworten würde, ohne sie vorher zu lesen. (in dem Sinne, Dinge nur für Punkte zu tun, die in diesem Fall sehr effektiv erscheinen ...)
Ebyrob
24

Das Hinzufügen des System.ConfigurationVerweises auf alle Projekte löst dieses Problem.

  1. Gehe zu Project->Add Reference

  2. Klicken Sie im angezeigten Feld auf die All assembliesRegisterkarte Liste in der linken Liste.

  3. Scrollen Sie in der zentralen Liste zu System.Configurationund stellen Sie sicher, dass das Kontrollkästchen aktiviert ist.

  4. Klicken Sie auf OK, um sich zu bewerben, und Sie können jetzt auf die ConfigurationManagerKlasse zugreifen .

Calios
quelle
19

Hinzufügen dieser Antwort, da keine der vorgeschlagenen Lösungen für mich funktioniert.

  1. Klicken Sie mit der rechten Maustaste auf die Registerkarte Referenzen, um eine Referenz hinzuzufügen.
  2. Klicken Sie auf die Registerkarte Baugruppen
  3. Suchen Sie nach 'System.Configuration'
  4. OK klicken.
Esther Lalremruati
quelle
9

Wenn Sie viele Warnungen erhalten (in meinem Fall 64 in einer Lösung!) Wie

CS0618: 'ConfigurationSettings.AppSettings' ist veraltet: 'Diese Methode ist veraltet und wurde durch System.Configuration! System.Configuration.ConfigurationManager.AppSettings' ersetzt.

Da Sie ein älteres Projekt aktualisieren, können Sie wie folgt viel Zeit sparen:

  1. Fügen Sie System.Configurationals Verweis auf Ihre Referenzen - Seite.
  2. Fügen Sie die folgenden zwei usingAnweisungen oben in jede class ( .cs) - Datei ein:

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

Durch diese Änderung werden alle Vorkommen von

ConfigurationSettings.AppSettings["mySetting"]

verweist jetzt auf den richtigen Konfigurationsmanager, nicht mehr auf den veralteten, und alle CS0618-Warnungen werden sofort gelöscht.

Denken Sie natürlich daran, dass dies ein schneller Hack ist. Langfristig sollten Sie in Betracht ziehen, den Code umzugestalten.

Matt
quelle
9

Ich habe eine bessere Lösung für das Problem gefunden configurationmanager does not exist in the current context.

Für eine gelesene Verbindungszeichenfolge web.configmüssen wir die ConfigurationManagerKlasse und ihre Methode verwenden. Wenn Sie verwenden möchten, müssen Sie den Namespace mit hinzufügen System.Configuration.

Obwohl Sie diesen Namespace verwendet haben, ConfigurationManagerzeigt das System beim Versuch, die Klasse zu verwenden, den Fehler "Konfigurationsmanager ist im aktuellen Kontext nicht vorhanden" an. Um dieses Problem zu lösen:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
Emu
quelle
6

Sind Sie sicher, dass Sie einen Verweis auf die .NET-Assembly hinzugefügt haben und nicht auf etwas anderes? Ich würde Ihre Referenz entfernen und dann versuchen, sie erneut hinzuzufügen. Stellen Sie dabei sicher, dass Sie im Visual Studio-Referenzdialog auf der Registerkarte .NET auswählen. Die neueste Version sollte in GAC 2.0.0.0 sein.

Dan Diplo
quelle
Baugruppendetails aus dem Eigenschaftenfenster: Name: System.configuration Pfad: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Version: 2.0.0.0 Laufzeitversion: v2.0.50727 Sieht etwas verdächtig aus? Vielen Dank!
Bleistiftscheibe
Nein, das ist genau wie erwartet. Wie wirklich seltsam - es tut mir leid, aber ich habe das noch nie gesehen. Viel Glück!
Dan Diplo
6
  1. Klicken Sie mit der rechten Maustaste auf Projekt
  2. Wählen Sie Manager NuGet Package
  3. Suchen Sie nach System.Configuration
  4. Wählen Sie System.Configuration.ConfigurationManager von Microsoft aus
  5. Installieren

jetzt kannst du:

using System.Configuration;
Samir Morimoto
quelle
4

Versuchen Sie zur Überprüfung der Integrität, ein neues Webanwendungsprojekt zu erstellen, und öffnen Sie den Code dahinter für die Seite Default.aspx. Fügen Sie in Page Load eine Zeile hinzu, um auf Ihre Verbindungszeichenfolge zuzugreifen.

Standardmäßig sollte System.Configuration als Referenz hinzugefügt werden. Sie sollten auch die using-Anweisung oben in Ihrer Codedatei sehen.

Mein Code hinter der Datei sieht jetzt so aus und wird ohne Probleme kompiliert.

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

Dies setzt voraus, dass ich in meiner web.config eine Verbindungszeichenfolge mit einem Namen habe, der gleich "MyConnectionStringName" ist ...

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

Ja, es ist elementar, ich weiß. Aber wenn Sie manchmal keine besseren Ideen haben, ist es hilfreich, sich gegen etwas wirklich Einfaches zu erkundigen, von dem Sie wissen, dass es funktionieren sollte.

Nevada
quelle
3

Einfach installieren

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

dann benutze

using System.Configuration;
Saad Lembarki
quelle
2

Wenn sich dieser Code in einem separaten Projekt befindet, z. B. in einem Bibliotheksprojekt. Vergessen Sie nicht, einen Verweis auf system.configuration hinzuzufügen.

Steve Rey
quelle
0

Dieser Fehler kann auch auftreten, wenn Sie versehentlich einen Verweis auf ein anderes, nicht verwandtes Projekt hinzufügen. Überprüfen Sie, ob dies auf Sie zutrifft.

Ike
quelle
0

Um dieses Problem zu lösen, gehen Sie zum Projektmappen-Explorer. Klicken Sie mit der rechten Maustaste auf Referenz und klicken Sie auf Referenz hinzufügen. Wählen Sie .net und suchen Sie system.configuration. Klicken Sie auf OK

Keshav Patel
quelle
0

Fügen Sie die Konfigurationsmanagerdatei hinzu, um eine Verbindung zur Datenbank web.config herzustellen

Shyamu
quelle