2009-08-13 21 views
363

Sto tentando di accedere a connectionStrings dal file di configurazione. Il codice è ASP.NET + C#. Ho aggiunto System.Configuration per riferimento e menzionato anche con l'utilizzo. Ma ancora non accetterebbe l'assemblea.Il nome "ConfigurationManager" non esiste nel contesto corrente

Sto utilizzando VSTS 2008. Qualche idea su quale potrebbe essere la ragione?

Un'altra cosa strana è il nome dell'assembly mostrato come "System.configuration", un minuscolo c che non è il modo in cui i nomi vengono visualizzati per altri gruppi 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

È possibile aggiungere del codice? Cosa intendi con esso non accetterebbe l'assemblea? Stai ricevendo un messaggio di errore specifico? –

risposta

29

Ok .. ha funzionato dopo il riavvio del VSTS. Il link ha suggerito la soluzione per lo stesso problema. Vorrei averlo visto prima. :)

+9

Oltre 7 anni dopo ed è ancora un peccato quante volte questa è la risposta. – Archer

+3

niente come segnare la tua risposta come risposta, quando non è davvero la risposta. Mod mod troppo male non può modificarlo per la risposta corretta effettiva. Amico ha segnato la sua risposta per i punti .... – ggiaquin16

6

Sei sicuro di aver aggiunto un riferimento per l'assembly .NET e non qualcos'altro? Rimuoverei il tuo riferimento e quindi provo a reinserirlo, 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.

+0

dettagli di montaggio da finestra delle proprietà: Nome: System.Configuration Percorso: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Versione: 2.0.0.0 Runtime versione: v2.0.50727 Qualcosa sembra sospetto? Grazie! – pencilslate

+0

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

3

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

È necessario che System.Configuration sia stato aggiunto come riferimento per impostazione predefinita. Dovresti anche vedere l'istruzione using nella parte superiore del tuo file di codice.

Il mio codice dietro il file ora sembra così e viene compilato 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 ho 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 qualche idea migliore a volte aiuta a controllare qualcosa di veramente semplice che sai dovrebbe funzionare.

663

Non è solo necessario utilizzare lo spazio dei nomi System.Configuration. È inoltre necessario aggiungere il riferimento all'assieme System.Configuration.dll, facendo clic con il pulsante destro del mouse sulla scheda Riferimenti, selezionare Aggiungi riferimento e quindi trovare System.Configuration. Questo funzionerà sicuramente. Anche per la NameValueCollection dovete scrivere:

using System.Collections.Specialized; 
+0

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

+10

Questa è la mia comprensione: potrebbe essere sbagliato. Quando aggiungi il riferimento, chiedi alla DLL di essere copiata nella cartella bin su compile/build. Alcune DLL viste come core vengono aggiunte al momento della creazione del progetto, ovvero quando si passa a file-> nuovo progetto, quindi i riferimenti vengono impostati in quel punto. Devono tutti seguire lo stesso processo, solo che alcuni sono fatti per te e alcuni devono essere eseguiti manualmente. Puoi testarlo eliminando il riferimento alla tua DLL di sistema e osservando che tutto il tuo codice fallisce. =) – Kieran

+6

OK. Quindi ho fatto un po 'più di ricerche e ho scoperto che sopra è per lo più vero. Tuttavia, alcuni dei file non dovranno essere scritti nella cartella bin in esecuzione poiché si trovano nella Global Assembly cashe (GAC), dove bin è un assembly assembly locale. Come il System.dll. – Kieran

9

Ho acquistato una soluzione migliore per il rilascio configurationmanager does not exist in the current context.

Per una stringa di connessione di lettura da web.config è necessario utilizzare la classe ConfigurationManager e il relativo metodo. Se si desidera utilizzare è necessario aggiungere spazio dei nomi utilizzando System.Configuration;

Anche se si è utilizzato questo spazio dei nomi, quando si tenta di utilizzare la classe ConfigurationManager, il sistema mostra un errore "configurationmanager non esiste nel contesto corrente". per risolvere questo problema:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
1

Se questo codice si trova su un progetto separato, come un progetto di libreria. Non forgeet per aggiungere riferimento a system.configuration.

0

È possibile che venga visualizzato questo errore anche se si aggiunge un riferimento a un progetto diverso, non correlato per errore. Controlla se questo si applica a te.

90

Nel progetto, fare clic con il tasto destro del mouse, Aggiungi riferimento ..., nella scheda .NET, individuare il nome del componente System.Configuration e fare clic su OK.

using System.Configuration indica al compilatore/IntelliSense di cercare in tale spazio dei nomi per qualsiasi classe utilizzata. Altrimenti, dovresti usare il nome completo (System.Configuration.ConfigurationManager) ogni volta. Ma se non si aggiunge il riferimento, tale spazio dei nomi/classe non verrà trovato da nessuna parte.

Si noti che una DLL può avere qualsiasi spazio dei nomi, quindi il file System.Configuration.dll potrebbe, in teoria, avere lo spazio dei nomi Some.Random.Name. Per chiarezza/coerenza di solito sono uguali, ma ci sono delle eccezioni.

8

Se stai ricevendo un sacco di avvertimenti (nel mio caso 64 in una soluzione!) Come

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

perché si sta aggiornando un progetto più anziani si può risparmiare un sacco di tempo come segue:!

  1. Aggiungi System.Configuration come riferimento alla tua sezione Riferimenti.
  2. Aggiungere le due using dichiarazioni alla parte superiore di ogni file di classe (.cs):

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

da questa modifica tutte le occorrenze di

ConfigurationSettings.AppSettings["mySetting"] 

sarà ora fare riferimento al giusto gestore di configurazione, non più deprecato e tutti gli avvisi CS0618 andranno via immediatamente.

Naturalmente, tieni presente che si tratta di un attacco rapido. A lungo termine, dovresti prendere in considerazione il refactoring del codice.

0

Per risolvere questo problema andare a Esplora soluzioni e di riferimento Fare clic destro e scegliere Aggiungi riferimento e ha scelto .net e trovare System.Configuration selezionare un click su OK

11

Aggiungendo questa risposta, come nessuna delle soluzioni proposte funziona per me .

  1. Fare clic con il pulsante destro del mouse sulla scheda dei riferimenti per aggiungere riferimento.
  2. Fare clic sulla scheda Assemblee
  3. Cerca 'System.Configuration'
  4. Fare clic su OK.
Problemi correlati