O nome 'ConfigurationManager' não existe no contexto atual

468

Estou tentando acessar a connectionStringspartir do arquivo de configuração. O código é ASP.NET + C #. Eu adicionei System.Configurationa referência e também mencionei com o uso. Mas ainda assim não aceitaria a assembléia.

Estou usando o VSTS 2008. Alguma idéia do que poderia ser o motivo?

Outra coisa estranha é o nome do assembly mostrado como "System.configuration", um minúsculo c que não é como os nomes são exibidos para outros assemblies do 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>
lápis
fonte
1
Você pode adicionar algum código? O que você quer dizer com isso não aceitaria a montagem? Você está recebendo uma mensagem de erro específica?
21009 Joshua Belden

Respostas:

820

Não é apenas necessário usar o espaço para nomeSystem.Configuration . Você também deve adicionar a referência à montagem System.Configuration.dll ,

  1. Clique com o botão direito do mouse em Referências / Dependências
  2. Escolha Adicionar referência
  3. Encontre e adicione System.Configuration.

Isso funcionará com certeza. Também para o que NameValueCollectionvocê tem que escrever:

using System.Collections.Specialized;
Kieran
fonte
1
+1 Obrigado Kieran. Você sabe por que isso precisa ser feito quando a maioria dos outros assemblies pode ser chamada simplesmente incluindo a instrução 'using'?
Escape
13
Este é o meu entendimento: pode estar errado. Quando você adiciona a referência, está solicitando que a dll seja copiada para a pasta bin na compilação / compilação. Algumas dll vistas como principais são adicionadas quando o projeto é criado, ou seja, quando você arquiva-> novo projeto para que as referências sejam configuradas nesse ponto. Todos eles precisam passar pelo mesmo processo, assim como alguns são feitos para você e outros que você deve fazer manualmente. Você pode testá-lo, excluindo a referência à sua dll System e assistindo todo o seu código falhar. =)
Kieran
7
ESTÁ BEM. Então, eu fiz um pouco mais de pesquisa e descobri que acima é principalmente verdade. No entanto, alguns dos arquivos não precisarão ser gravados na pasta bin em execução, pois estão no caixa de montagem global (GAC), onde bin é caixa de montagem local. Como o System.dll.
Kieran
4
O espaço de nome 'System.Configuration' pode ser encontrado na dll 'System', é por isso que pode haver algum arranhão na cabeça quando o Intellisense aceitar o 'using System.Configuration;' mas não encontrará o ConfigurationManager, a menos que o System.Configuration.dll seja referenciado pelo projeto.
Jaybro # 27/16
99

No seu projeto, clique com o botão direito do mouse em Adicionar referência ... , na guia .NET, encontre o System.Configurationnome do componente e clique em OK.

using System.Configurationinstrui o compilador / IntelliSense a procurar nesse namespace as classes que você usa. Caso contrário, você teria que usar o nome completo ( System.Configuration.ConfigurationManager) toda vez. Mas se você não adicionar a referência, esse namespace / classe não será encontrado em nenhum lugar.

Observe que uma DLL pode ter qualquer espaço para nome; portanto, o arquivo System.Configuration.dllpode, em teoria, ter o espaço para nome Some.Random.Name. Para maior clareza / consistência, geralmente são iguais, mas há exceções.

Rameez
fonte
40

Ok .. funcionou depois de reiniciar o VSTS. O link sugeriu a solução para o mesmo problema. Gostaria de ter visto isso antes. :)

lápis
fonte
16
Mais de 7 anos depois, e ainda é uma pena a frequência com que essa é a resposta.
Reponha Monica Cellio
4
nada como marcar sua própria resposta como resposta, quando na verdade não é a resposta. Mods muito ruins não podem editá-lo para a resposta correta real. Cara marcou sua própria resposta para os pontos ....
ggiaquin16
1
@ ggiaquin16 você não conseguir os pontos, se você aceitar a si mesmo;)
JAD
@calios ou se você leu a pergunta original, pode ver que o questionador já adicionou a montagem ao projeto na primeira versão da pergunta. Para esse assembly e versão específicos do VS, era necessário reiniciar o IDE ou o erro continuaria acontecendo. essa foi a solução. As duas respostas altamente classificadas aqui nunca foram relevantes para a pergunta que está sendo feita, mas você não se pergunta por que alguém responderia a uma pergunta sem lê-la primeiro. (na veia de fazer as coisas apenas para pontos que não parecem muito eficaz neste caso ...)
ebyrob
24

A adição de System.Configurationcomo referência a todos os projetos resolverá isso.

  1. Vá para Project->Add Reference

  2. Na caixa exibida, clique na All assembliesguia lista na lista à esquerda.

  3. Na lista central, role até System.Configuratione verifique se a caixa está marcada.

  4. Clique em ok para se inscrever e agora você poderá acessar a ConfigurationManagerturma.

calios
fonte
19

Adicionando esta resposta, como nenhuma das soluções sugeridas funciona para mim.

  1. Clique com o botão direito na guia referências para adicionar referência.
  2. Clique na guia Assemblies
  3. Procure por 'System.Configuration'
  4. Clique OK.
Esther Lalremruati
fonte
9

Se você receber muitos avisos (no meu caso 64 em uma solução!) Como

CS0618: 'ConfigurationSettings.AppSettings' está obsoleto: 'Este método está obsoleto, foi substituído por System.Configuration! System.Configuration.ConfigurationManager.AppSettings'

porque você está atualizando um projeto mais antigo, pode economizar muito tempo da seguinte maneira:

  1. Adicione System.Configurationcomo referência à sua seção Referências .
  2. Adicione as duas usinginstruções a seguir na parte superior de cada .csarquivo de classe ( ):

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

Por essa mudança, todas as ocorrências de

ConfigurationSettings.AppSettings["mySetting"]

agora fará referência ao gerenciador de configuração correto, não o obsoleto, e todos os avisos do CS0618 desaparecerão imediatamente.

Obviamente, lembre-se de que este é um hack rápido. A longo prazo, considere refatorar o código.

Matt
fonte
9

Eu obtive uma solução melhor para o problema configurationmanager does not exist in the current context.

Para uma string de conexão de leitura web.config, precisamos usar a ConfigurationManagerclasse e seu método. Se você deseja usar, você precisa adicionar um espaço para nome usando System.Configuration;

Embora você tenha usado esse espaço para nome, ao tentar usar a ConfigurationManagerclasse, o sistema mostra um erro "o gerenciador de configuração não existe no contexto atual". Para resolver este problema:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
UEM
fonte
6

Tem certeza de que adicionou uma referência ao assembly .NET e não outra coisa? Eu removia sua referência e tentava adicioná-la novamente, certificando-se de selecionar a guia .NET na caixa de diálogo de referência do Visual Studio - a versão mais recente deve ser 2.0.0.0 no GAC.

Dan Diplo
fonte
Detalhes da montagem na janela de propriedades: Nome: Caminho do System.configuration: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Versão: 2.0.0.0 Versão de tempo de execução: v2.0.50727 Alguma coisa parece suspeita? Obrigado!
Pencilslate
Não, é exatamente como o esperado. Que estranho - desculpe, mas nunca vi isso antes. Boa sorte!
21119 Dan Diplo
6
  1. Clique com o botão direito do mouse em Projeto
  2. Selecionar pacote NuGet do gerente
  3. Localize System.Configuration
  4. Selecione System.Configuration.ConfigurationManager da Microsoft
  5. Instalar

agora você pode:

using System.Configuration;
Samir Morimoto
fonte
4

Para uma verificação de integridade, tente criar um novo projeto de aplicativo Web, abra o código atrás da página Default.aspx. Adicione uma linha no Page_Load para acessar sua cadeia de conexão.

Ele deve ter System.Configuration adicionado como referência por padrão. Você também deve ver a instrução using na parte superior do seu arquivo de código.

Meu código por trás do arquivo agora se parece com isso e é compilado sem 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;
    }
  }
}

Isso pressupõe que eu possua uma cadeia de conexão no meu web.config com um nome igual a "MyConnectionStringName", assim ...

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

Sim, é elementar, eu sei. Mas, se você não tem idéias melhores, às vezes, isso ajuda a comparar algo realmente simples que você sabe que deve funcionar.

Nevada
fonte
3

Basta instalar

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

então use

using System.Configuration;
Saad Lembarki
fonte
2

Se esse código estiver em um projeto separado, como um projeto de biblioteca. Não forneça para adicionar referência ao system.configuration.

Steve Rey
fonte
0

Você também pode receber esse erro se adicionar uma referência a um projeto diferente e não relacionado por engano. Verifique se isso se aplica a você.

Ike
fonte
0

Para resolver esse problema, vá para o Solution Explorer E clique com o botão direito do mouse em reference e clique em add reference e escolha .net e encontre system.configuration selecione um clique ok

Keshav Patel
fonte
0

Inclua o arquivo do gerenciador de configuração para conectar-se ao banco de dados web.config

shyamu
fonte