2009-08-13 40 views
363

Estoy intentando acceder al connectionStrings desde el archivo de configuración. El código es ASP.NET + C#. He agregado System.Configuration a la referencia y también he mencionado con usar. Pero aún así no aceptaría la asamblea.El nombre 'ConfigurationManager' no existe en el contexto actual

Estoy usando VSTS 2008. ¿Alguna idea de cuál podría ser el motivo?

Otra cosa extraña es el nombre del ensamblado que se muestra como "System.configuration", una letra minúscula c que no es como se muestran los nombres para otros ensambles 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> 
+1

¿Puede agregar un código? ¿A qué te refieres con que no aceptaría la asamblea? ¿Recibes un mensaje de error específico? –

Respuesta

29

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

+9

Más de 7 años después y sigue siendo una lástima la frecuencia con la que esta es la respuesta. – Archer

+3

nada como marcar su propia respuesta como la respuesta, cuando en realidad no es la respuesta. Las modificaciones demasiado malas no pueden editarse para la respuesta correcta real. Amigo marcó su propia respuesta para los puntos .... – ggiaquin16

6

¿Seguro de que haya añadido una referencia al ensamblado .NET y no otra cosa? Quitaría su referencia y luego volvería a agregarla, asegurándose 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.

+0

detalles de montaje de ventana de propiedades: Nombre: System.Configuration ruta: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.Configuration.dll Versión: 2.0.0.0 Runtime Versión: v2.0.50727 ¿Algo parece sospechoso? ¡Gracias! – pencilslate

+0

No, eso es exactamente como se esperaba. Qué extraño, lo siento, pero nunca había visto esto antes. ¡Buena suerte! –

3

Para una verificación de la cordura, intente crear un nuevo proyecto de aplicación web, abra el código detrás para 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" como tal ...

<?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 que conozco. Pero si no tienes mejores ideas, a veces es útil verificar algo realmente simple que sepa que debería funcionar.

663

No solo es necesario utilizar el espacio de nombres System.Configuration. También debe agregar la referencia al ensamblaje System.Configuration.dll, haciendo clic con el botón derecho en la pestaña Referencias, elija agregar referencia y luego encuentre System.Configuration. Esto funcionará con seguridad. También para el NameValueCollection usted tiene que escribir:

using System.Collections.Specialized; 
+0

+1 Gracias Kieran. ¿Sabes por qué esto tiene que hacerse cuando la mayoría de las otras asambleas simplemente se pueden llamar al incluir la instrucción 'usar'? – Dhaust

+10

Esto es lo que entiendo: puede ser incorrecto. Cuando agrega la referencia, le pide al dll que se copie en la carpeta bin en compile/build. Algunos dll's vistos como core se agregan cuando se crea el proyecto, es decir, cuando se pasa a file-> new project para que las referencias se configuren en ese punto. Todos tienen que pasar por el mismo proceso solo que algunos están hechos para ti y otros debes hacerlo manualmente. Puede probarlo eliminando la referencia a su dll del Sistema y viendo cómo falla todo su código. =) – Kieran

+6

OK. Así que investigué un poco más y descubrí que lo de arriba es mayormente cierto. Sin embargo, algunos de los archivos no necesitarán escribirse en la carpeta bin en ejecución, ya que están en el cashe de Global Assembly (GAC), donde bin es el cashe de ensamblado local. Como el System.dll. – Kieran

9

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

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

Aunque utilizó este espacio de nombres, cuando intenta utilizar la clase ConfigurationManager, el sistema muestra un error "configurationmanager no existe en el contexto actual". para resolver este problema:

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

Si el código está en un proyecto separado, como un proyecto de biblioteca. No olvide añadir una referencia a system.configuration.

0

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

90

En su proyecto, haga clic en, Agregar referencia ..., en la ficha .NET, encontrar el System.Configuration nombre del componente y haga clic en OK.

using System.Configuration le dice al compilador/IntelliSense que busque en ese espacio de nombres las clases 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 ningún lado.

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

8

Si usted está recibiendo una gran cantidad de advertencias (en mi caso 64 en una solución!) Como

CS0618: '' ConfigurationSettings.AppSettings es obsoleto: 'Este método es obsoleto, se ha reemplazado por System.Configuration System.Configuration.ConfigurationManager.AppSettings'

porque va a actualizar un proyecto de más edad le puede ahorrar mucho tiempo de la siguiente manera:!

  1. Añadir System.Configuration como una referencia a sus Referencias sección.
  2. Añadir las dos using declaraciones siguientes a la parte superior de cada archivo de clase (.cs):

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

Por este cambio todas las apariciones de

ConfigurationSettings.AppSettings["mySetting"] 

ahora hará referencia a la el administrador de configuración correcto, ya no es el obsoleto, y todas las advertencias CS0618 desaparecerán inmediatamente.

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

0

Para resolver este problema vaya a Explorador de soluciones y de referencia botón derecho del ratón y haga clic en añadir referencia y eligió .NET y encontrar System.Configuration seleccionar un clic en OK

11

La adición de esta respuesta, ya que ninguna de las propuestas de solución que funciona para mí .

  1. Haga clic derecho en la pestaña de referencias para agregar la referencia.
  2. Haga clic en la pestaña Asambleas
  3. Buscar 'System.Configuration'
  4. Haga clic en OK.
Cuestiones relacionadas