Il nome "ConfigurationManager" non esiste nel contesto corrente


468

Sto provando ad accedere connectionStringsdal file di configurazione. Il codice è ASP.NET + C #. Ho aggiunto System.Configurational riferimento e anche menzionato con l'utilizzo. Ma ancora non accetterebbe l'assemblea.

Sto usando VSTS 2008. Hai idea di quale potrebbe essere la ragione?

Un'altra cosa strana è il nome dell'assembly mostrato come "System.configuration", una lettera c minuscola che non è il modo in cui i nomi vengono visualizzati per altri assembly di sistema.

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

config:

<?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
Puoi aggiungere del codice? Cosa intendi con questo non accetterebbe l'assemblea? Ricevi un messaggio di errore specifico?
Joshua Belden,

Risposte:


820

Non è solo necessario utilizzare lo spazio dei nomiSystem.Configuration . Devi anche aggiungere il riferimento all'assembly System.Configuration.dll , entro

  1. Fare clic con il tasto destro del mouse su Riferimenti / Dipendenze
  2. Scegli Aggiungi riferimento
  3. Trova e aggiungi System.Configuration.

Questo funzionerà di sicuro. Anche per NameValueCollectionte devi scrivere:

using System.Collections.Specialized;

1
+1 Grazie Kieran. Sai perché questo deve essere fatto quando la maggior parte degli altri assiemi può essere chiamata semplicemente includendo l'istruzione 'using'?
Dhaust

13
Questa è la mia comprensione: potrebbe essere sbagliato. Quando aggiungi il riferimento, chiedi alla DLL di essere copiata nella cartella bin durante la compilazione / compilazione. Alcune DLL viste come core vengono aggiunte al momento della creazione del progetto, ovvero quando si passa al file-> nuovo progetto in modo che i riferimenti vengano impostati in quel punto. Devono tutti passare attraverso lo stesso processo solo che alcuni sono fatti per te e altri che devi fare manualmente. È possibile testarlo eliminando il riferimento alla DLL di sistema e guardando tutto il codice non riesce. =)
Kieran,

7
OK. Quindi ho fatto un po 'più di ricerca e ho scoperto che sopra è per lo più vero. Tuttavia, alcuni dei file non dovranno essere scritti nella cartella bin durante l'esecuzione in quanto si trovano nella cassa Global Assembly (GAC), dove bin è la cassa dell'assembly locale. Come il System.dll.
Kieran,

4
Lo spazio dei nomi 'System.Configuration' si trova nella dll 'System', ecco perché potrebbero esserci dei grattacapi quando Intellisense accetta 'using System.Configuration;' ma non troverà ConfigurationManager a meno che System.Configuration.dll non faccia riferimento al progetto.
jaybro,

99

Nel progetto, fai clic con il pulsante destro del mouse, Aggiungi riferimento ... , nella scheda .NET, trova il System.Configurationnome del componente e fai clic su OK.

using System.Configurationindica al compilatore / IntelliSense di cercare nello spazio dei nomi tutte le classi utilizzate. Altrimenti, dovresti usare il nome completo ( System.Configuration.ConfigurationManager) ogni volta. Ma se non aggiungi il riferimento, quello spazio dei nomi / classe non sarà trovato da nessuna parte.

Si noti che una DLL può avere qualsiasi spazio dei nomi, quindi il file System.Configuration.dllpotrebbe, in teoria, avere lo spazio dei nomi Some.Random.Name. Per chiarezza / coerenza sono generalmente gli stessi, ma ci sono eccezioni.


40

Ok .. ha funzionato dopo aver riavviato il VSTS. Il collegamento ha suggerito la soluzione per lo stesso problema. Vorrei averlo visto prima. :)


16
Oltre 7 anni dopo ed è ancora un peccato quanto spesso questa sia la risposta.
Ripristina Monica Cellio il

4
niente come contrassegnare la propria risposta come risposta, quando in realtà non è la risposta. Mod troppo male non possono modificarlo per la risposta corretta effettiva. Amico ha segnato la sua risposta per i punti ....
ggiaquin16,

1
@ ggiaquin16 non ottieni punti se accetti te stesso;)
JAD

@calios o se leggi la domanda originale puoi vedere che l'interrogatore aveva già aggiunto l'assemblaggio al progetto nella prima versione della domanda. Per questo particolare assembly e versione di VS era necessario riavviare l'IDE o l'errore continuava a verificarsi. quella era la soluzione. Le due risposte molto valutate qui non sono mai state rilevanti per la domanda che viene posta, ma non pensi di chiederti perché qualcuno dovrebbe rispondere a una domanda senza prima leggerla. (nella vena di fare cose solo per punti che sembrano molto efficaci in questo caso ...)
ebyrob

24

L'aggiunta del System.Configurationriferimento a tutti i progetti risolverà questo problema.

  1. Vai a Project->Add Reference

  2. Nella casella visualizzata, fai clic sulla All assembliesscheda elenco nell'elenco a sinistra.

  3. Nell'elenco centrale, scorrere fino a System.Configuratione assicurarsi che la casella sia selezionata.

  4. Fai clic su OK per applicare e ora sarai in grado di accedere alla ConfigurationManagerclasse.


19

Aggiungendo questa risposta, poiché nessuna delle soluzioni suggerite funziona per me.

  1. Fare clic con il tasto destro sulla scheda riferimenti per aggiungere riferimento.
  2. Fare clic sulla scheda Assiemi
  3. Cerca 'System.Configuration'
  4. Clicca OK.

9

Se ricevi molti avvisi (nel mio caso 64 in una soluzione!) Come

CS0618: "ConfigurationSettings.AppSettings" è obsoleto: "Questo metodo è obsoleto, è stato sostituito da System.Configuration! System.Configuration.ConfigurationManager.AppSettings"

poiché stai aggiornando un vecchio progetto puoi risparmiare molto tempo come segue:

  1. Aggiungi System.Configurationcome riferimento alla sezione Riferimenti .
  2. Aggiungi le seguenti due usingistruzioni all'inizio di ogni .csfile class ( ):

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

Con questo cambiamento tutte le occorrenze di

ConfigurationSettings.AppSettings["mySetting"]

farà ora riferimento al gestore della configurazione corretto, non più a quello obsoleto, e tutti gli avvisi di CS0618 scompariranno immediatamente.

Naturalmente, tieni presente che questo è un trucco rapido. A lungo termine, dovresti considerare il refactoring del codice.


9

Ho ottenuto una soluzione migliore per il problema configurationmanager does not exist in the current context.

Per una stringa di connessione in lettura, web.configdobbiamo usare la ConfigurationManagerclasse e il suo metodo. Se vuoi usare devi aggiungere lo spazio dei nomi usando System.Configuration;

Sebbene sia stato utilizzato questo spazio dei nomi, quando si tenta di utilizzare la ConfigurationManagerclasse, il sistema mostra un errore "Configurationmanager non esiste nel contesto corrente". Risolvere questo problema:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 

6

Sei sicuro di aver aggiunto un riferimento all'assembly .NET e non qualcos'altro? Rimuoverei il tuo riferimento e proverei quindi ad aggiungerlo nuovamente, assicurandoti di selezionare dalla scheda .NET nella finestra di dialogo di riferimento di Visual Studio: l'ultima versione dovrebbe essere 2.0.0.0 in GAC.


Dettagli dell'assieme dalla finestra delle proprietà: Nome: System.configuration Percorso: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Versione: 2.0.0.0 Versione runtime: v2.0.50727 Qualcosa sembra sospetto? Grazie!
pencilslate,

No, è esattamente come previsto. Che strano! Mi dispiace, ma non l'ho mai visto prima. In bocca al lupo!
Dan Diplo,

6
  1. Fare clic con il tasto destro del mouse su Progetto
  2. Seleziona Manager NuGet Package
  3. Trova System.Configuration
  4. Seleziona System.Configuration.ConfigurationManager di Microsoft
  5. Installare

ora puoi:

using System.Configuration;

4

Per un controllo di integrità, prova a creare un nuovo progetto di applicazione Web, apri il codice per la pagina Default.aspx. Aggiungi una riga in Page_Load per accedere alla stringa di connessione.

Dovrebbe avere System.Configuration aggiunto come riferimento per impostazione predefinita. Dovresti anche vedere l'istruzione using già all'inizio del tuo file di codice.

Il mio codice dietro il file ora appare così e si compila senza problemi.

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

Questo presuppone che io abbia una stringa di connessione nel mio web.config con un nome uguale a "MyConnectionStringName" in questo modo ...

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

Sì, è elementare lo so. Ma se non hai idee migliori a volte aiuta a confrontare qualcosa di veramente semplice che sai che dovrebbe funzionare.


3

Basta installare

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

quindi utilizzare

using System.Configuration;

2

Se questo codice si trova su un progetto separato, come un progetto di libreria. Non falsificare l'aggiunta di riferimenti a system.configuration.


0

È inoltre possibile che venga visualizzato questo errore se si aggiunge un riferimento a un progetto diverso e non correlato per errore. Controlla se questo è il tuo caso.


0

Per risolvere questo problema, vai a Esplora soluzioni e fai clic con il tasto destro del mouse e fai clic su aggiungi riferimento e scegli .net e trova system.configuration seleziona un clic ok


0

Aggiungere il file del gestore della configurazione per connettersi al database web.config

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.