El nombre 'ConfigurationManager' no existe en el contexto actual

468

Estoy tratando de acceder connectionStringsdesde el archivo de configuración. El código es ASP.NET + C #. He agregado System.Configurationa referencia y también mencioné con el uso. Pero aún así no aceptaría la asamblea.

Estoy usando VSTS 2008. ¿Alguna idea de cuál podría ser la razón?

Otra cosa extraña es el nombre del ensamblado que se muestra como "System.configuration", una c minúscula que no es cómo se muestran los nombres para otros ensamblados del 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>
lapiz
fuente
1
¿Puedes agregar algún código? ¿Qué quieres decir con que no aceptaría la asamblea? ¿Recibes un mensaje de error específico?
Joshua Belden el

Respuestas:

820

No solo es necesario usar el espacio de nombres System.Configuration . También debe agregar la referencia al ensamblaje System.Configuration.dll , por

  1. Haga clic derecho en Referencias / Dependencias
  2. Elija Agregar referencia
  3. Encuentra y agrega System.Configuration.

Esto funcionará seguro. También para el NameValueCollectiontienes que escribir:

using System.Collections.Specialized;
Kieran
fuente
1
+1 Gracias Kieran. ¿Sabes por qué esto tiene que hacerse cuando la mayoría de los otros ensamblajes simplemente se pueden llamar incluyendo la instrucción 'using'?
Dhaust
13
Este es mi entendimiento: puede estar equivocado. Cuando agrega la referencia, solicita que se copie el archivo dll en la carpeta bin en compilar / compilar. Algunos dll que se ven como núcleo se agregan cuando se crea el proyecto, es decir, cuando va a archivo-> nuevo proyecto, de modo que las referencias se configuran en ese punto. Todos tienen que pasar por el mismo proceso solo que algunos se hacen por ti y otros debes hacerlo manualmente. Puede probarlo eliminando la referencia a su dll del sistema y viendo fallar todo su código. =)
Kieran
77
OKAY. Así que hice un poco más de investigación y descubrí que lo anterior es mayormente cierto. Sin embargo, algunos de los archivos no necesitarán escribirse en la carpeta bin en ejecución, ya que se encuentran en el conjunto global de la asamblea (GAC), donde bin es el conjunto local de la caja. Al igual que el System.dll.
Kieran
44
El espacio de nombres 'System.Configuration' se puede encontrar en dll 'System', por eso puede haber algunos rasguños en la cabeza cuando Intellisense acepta 'using System.Configuration'; pero no encontrará ConfigurationManager a menos que el proyecto haga referencia a System.Configuration.dll.
jaybro
99

En su proyecto, haga clic con el botón derecho, Agregar referencia ... , en la pestaña .NET, busque el System.Configurationnombre del componente y haga clic en Aceptar.

using System.Configurationle dice al compilador / IntelliSense que busque en ese espacio de nombres cualquier clase que use. De lo contrario, tendría que usar el nombre completo ( System.Configuration.ConfigurationManager) cada vez. Pero si no agrega la referencia, ese espacio de nombres / clase no se encontrará en ninguna parte.

Tenga en cuenta que una DLL puede tener cualquier espacio de nombres, por lo que el archivo System.Configuration.dllpodría, en teoría, tener el espacio de nombres Some.Random.Name. Por claridad / consistencia, generalmente son los mismos, pero hay excepciones.

Rameez
fuente
40

Ok ... funcionó después de reiniciar el VSTS. El enlace sugirió la solución para el mismo problema. Ojalá pudiera haberlo visto antes. :)

lapiz
fuente
16
Más de 7 años después y sigue siendo una pena la frecuencia con la que esta es la respuesta.
Reinstale a Monica Cellio el
44
nada como marcar su propia respuesta como la respuesta, cuando en realidad no es la respuesta. Lástima que los mods no puedan editarlo para la respuesta correcta real. Tio marcó su propia respuesta para los puntos ....
ggiaquin16
1
@ ggiaquin16 no obtienes los puntos si te aceptas;)
JAD
@calios o si lee la pregunta original, puede ver que el interlocutor ya había agregado el ensamblado al proyecto en la primera versión de la pregunta. Para este ensamblaje en particular y la versión de VS era necesario reiniciar el IDE o el error seguiría ocurriendo. Esa fue la solución. Las dos respuestas altamente calificadas aquí nunca fueron relevantes para la pregunta que realmente se está haciendo, pero no se pregunte por qué alguien respondería una pregunta sin leerla primero. (en la línea de hacer cosas solo por puntos que parecen muy efectivos en este caso ...)
ebyrob
24

Agregar el System.Configurationcomo referencia a todos los proyectos resolverá esto.

  1. Ir a Project->Add Reference

  2. En el cuadro que aparece, haga clic en la All assembliespestaña de la lista en la lista de la izquierda.

  3. En la lista central, desplázate System.Configurationy asegúrate de que la casilla esté marcada.

  4. Haga clic en Aceptar para aplicar, y ahora podrá acceder a la ConfigurationManagerclase.

calios
fuente
19

Agregando esta respuesta, ya que ninguna de las soluciones sugeridas funciona para mí.

  1. Haga clic derecho en la pestaña de referencias para agregar referencia.
  2. Haga clic en la pestaña Ensamblajes
  3. Busque 'System.Configuration'
  4. Haga clic en Aceptar.
Esther Lalremruati
fuente
9

Si recibe muchas advertencias (¡en mi caso 64 en una solución!) Como

CS0618: 'ConfigurationSettings.AppSettings' está obsoleto: 'Este método está obsoleto, ha sido reemplazado por System.Configuration! System.Configuration.ConfigurationManager.AppSettings'

Debido a que está actualizando un proyecto anterior, puede ahorrar mucho tiempo de la siguiente manera:

  1. Agregue System.Configurationcomo referencia a su sección de Referencias .
  2. Agregue las siguientes dos usingdeclaraciones al principio de cada .csarchivo class ( ):

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

Por este cambio, todas las ocurrencias de

ConfigurationSettings.AppSettings["mySetting"]

ahora hará referencia al administrador de configuración correcto, ya no el obsoleto, y todas las advertencias CS0618 desaparecerán de inmediato.

Por supuesto, tenga en cuenta que este es un truco rápido. A largo plazo, debería considerar refactorizar el código.

Mate
fuente
9

He conseguido una mejor solución para el problema configurationmanager does not exist in the current context.

Para leer una cadena de conexión web.config, necesitamos usar la ConfigurationManagerclase y su método. Si desea usar, debe agregar espacio de nombres usando System.Configuration;

Aunque utilizó este espacio de nombres, cuando intenta utilizar la ConfigurationManagerclase, el sistema muestra un error "el administrador de configuración no existe en el contexto actual". Para resolver este problema:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
Emú
fuente
6

¿Está seguro de haber agregado una referencia al ensamblado .NET y no otra cosa? Quitaría su referencia y luego trataría de volver a agregarla, asegurándome de seleccionar desde la pestaña .NET en el diálogo de referencia de Visual Studio: la última versión debería ser 2.0.0.0 en GAC.

Dan Diplo
fuente
Detalles del ensamblaje desde la ventana de propiedades: Nombre: System.configuration Ruta: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Versión: 2.0.0.0 Versión en tiempo de ejecución: v2.0.50727 ¿Algo parece sospechoso? ¡Gracias!
lapiz
No, eso es exactamente como se esperaba. Qué extraño. Lo siento, pero nunca había visto esto antes. ¡Buena suerte!
Dan Diplo
6
  1. Haga clic derecho en Proyecto
  2. Seleccione el paquete NuGet Manager
  3. Encuentra System.Configuration
  4. Seleccione System.Configuration.ConfigurationManager de Microsoft
  5. Instalar en pc

ahora usted puede:

using System.Configuration;
Samir Morimoto
fuente
4

Para una comprobación de integridad, intente crear un nuevo proyecto de aplicación web, abra el código que se encuentra detrás de la página Default.aspx. Agregue una línea en Page_Load para acceder a su cadena de conexión.

Debería tener System.Configuration agregado como referencia por defecto. También debería ver la declaración de uso en la parte superior de su archivo de código ya.

Mi código detrás del archivo ahora se ve así y se compila sin problemas.

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

Esto supone que tengo una cadena de conexión en mi web.config con un nombre igual a "MyConnectionStringName" así ...

<?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í, es elemental, lo sé. Pero si no tienes mejores ideas, a veces es útil comparar algo realmente simple que sabes que debería funcionar.

Nevada
fuente
3

Solo instala

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

luego usa

using System.Configuration;
Saad Lembarki
fuente
2

Si este código está en un proyecto separado, como un proyecto de biblioteca. No olvide agregar referencia a system.configuration.

Steve Rey
fuente
0

También puede obtener este error si agrega una referencia a un proyecto diferente y no relacionado por error. Compruebe si eso se aplica a usted.

Ike
fuente
0

Para resolver este problema, vaya al Explorador de soluciones y haga clic con el botón derecho en referencia y haga clic en agregar referencia y elija .net y busque system.configuration seleccione un clic y haga clic en Aceptar

Keshav Patel
fuente
0

Agregue el archivo del administrador de configuración para conectarse a la base de datos web.config

shyamu
fuente