web-dev-qa-db-fra.com

Le nom 'ConfigurationManager' n'existe pas dans le contexte actuel

J'essaie d'accéder à connectionStrings à partir du fichier de configuration. Le code est ASP.NET + C #. J'ai ajouté System.Configuration à la référence et aussi mentionné avec using. Mais il n’accepterait toujours pas l’Assemblée.

J'utilise VSTS 2008. Une idée de ce qui pourrait en être la raison? 

Une autre chose étrange est le nom d'assembly indiqué par "System.configuration", un c minuscule qui n'est pas la façon dont les noms sont affichés pour les autres assemblys système.

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>
409
pencilslate

Ok .. cela a fonctionné après le redémarrage du VSTS. Le link a suggéré la solution au même problème. J'aurais aimé pouvoir le voir avant. :)

36
pencilslate

Il n'est pas seulement nécessaire d'utiliser le namespace System.Configuration. Vous devez également ajouter la référence à Assembly System.Configuration.dll, by

  1. Cliquez avec le bouton droit sur References/Dependencies.
  2. Choisissez Ajouter une référence 
  3. Recherchez et ajoutez System.Configuration

Cela fonctionnera à coup sûr . Aussi pour la NameValueCollection vous devez écrire:

using System.Collections.Specialized;
758
Kieran

Dans votre projet, cliquez avec le bouton droit de la souris sur Ajouter une référence ... , dans l'onglet .NET, recherchez le nom du composant System.Configuration et cliquez sur OK.

using System.Configuration indique au compilateur/IntelliSense de rechercher dans cet espace de noms les classes que vous utilisez. Sinon, vous devrez utiliser le nom complet (System.Configuration.ConfigurationManager) à chaque fois. Mais si vous n'ajoutez pas la référence, cet espace de noms/classe ne sera trouvé nulle part.

Notez qu'un DLL peut avoir n'importe quel espace de noms. Ainsi, le fichier System.Configuration.dll pourrait, en théorie, avoir l'espace de noms Some.Random.Name. Par souci de clarté/cohérence, ils sont généralement les mêmes, mais il existe des exceptions.

94
Rameez

Ajouter cette réponse, car aucune des solutions suggérées ne fonctionne pour moi. 

  1. Cliquez avec le bouton droit sur l'onglet références pour ajouter une référence.
  2. Cliquez sur l'onglet Assemblies
  3. Recherchez 'System.Configuration' 
  4. Cliquez sur OK.
17

J'ai eu une meilleure solution pour le problème configurationmanager does not exist in the current context

Pour une chaîne de connexion en lecture à partir de web.config, nous devons utiliser la classe ConfigurationManager et sa méthode. Si vous souhaitez utiliser, vous devez ajouter un espace de noms à l'aide de System.Configuration;

Bien que vous ayez utilisé cet espace de noms, lorsque vous essayez d'utiliser la classe ConfigurationManager, le système affiche alors une erreur «Le gestionnaire de configuration n'existe pas dans le contexte actuel» .

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
9
Emu

Si vous recevez beaucoup d’avertissements (dans mon cas 64 dans une solution!) Comme

CS0618: 'ConfigurationSettings.AppSettings' est obsolète: 'Cette méthode est obsolète, elle est remplacée par System.Configuration! System.Configuration.ConfigurationManager.AppSettings'

comme vous mettez à niveau un projet plus ancien, vous pouvez gagner beaucoup de temps comme suit:

  1. Ajoutez System.Configuration en tant que référence à votre section Références .
  2. Ajoutez les deux instructions using suivantes en haut de chaque fichier de classe (.cs):

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

Par ce changement, toutes les occurrences de 

ConfigurationSettings.AppSettings["mySetting"]

référencera maintenant le bon gestionnaire de configuration, et non plus celui obsolète, et tous les avertissements CS0618 disparaîtront immédiatement.

Bien sûr, gardez à l'esprit qu'il s'agit d'un hack rapide. Sur le long terme, vous devriez envisager de refactoriser le code.

8
Matt

Êtes-vous sûr d'avoir ajouté une référence à .NET Assembly et pas autre chose? Je supprime votre référence, puis j'essaie de la rajouter en veillant à la sélectionner dans l'onglet .NET de la boîte de dialogue de référence de Visual Studio. La version la plus récente devrait être 2.0.0.0 dans GAC.

6
Dan Diplo

Pour un contrôle d'intégrité, essayez de créer un nouveau projet d'application Web, ouvrez le code correspondant à la page Default.aspx. Ajoutez une ligne dans Page_Load pour accéder à votre chaîne de connexion.

System.Configuration devrait être ajouté comme référence par défaut. Vous devriez également voir l'instruction using en haut de votre fichier de code déjà.

Mon code derrière le fichier ressemble maintenant à ceci et compile sans problèmes.

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

Cela suppose que j'ai une chaîne de connexion dans mon Web.config avec un nom égal à "MyConnectionStringName" comme si ...

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

Oui, c'est élémentaire, je sais. Mais si vous n'avez pas de meilleures idées, il est parfois utile de vérifier si quelque chose de très simple devrait marcher.

4
Nevada

Ajouter le System.Configuration comme référence à tous les projets résoudra ce problème.

  1. Allez à Project -> Add Reference

  2. Dans la zone qui apparaît, cliquez sur l'onglet All assemblies dans la liste de gauche.

  3. Dans la liste centrale, faites défiler jusqu'à System.Configuration et assurez-vous que la case est cochée.

  4. Cliquez sur ok pour postuler et vous pourrez maintenant accéder à la classe ConfigurationManager.

4
calios

Si ce code se trouve dans un projet séparé, comme un projet de bibliothèque, par exemple, vous n'aurez pas à ajouter une référence à system.configuration.

1
Steve Rey
  1. Clic droit sur Projet
  2. Sélectionnez Manager NuGet Package
  3. Rechercher System.Configuration
  4. Sélectionnez System.Configuration.ConfigurationManager de Microsoft.
  5. Installer

maintenant vous pouvez:

using System.Configuration;
1
Samir Morimoto

Vous pouvez également obtenir cette erreur si vous ajoutez par erreur une référence à un projet différent, non lié. Vérifiez si cela s'applique à vous.

0
Ike

Pour résoudre ce problème, accédez à Explorateur de solutions et cliquez avec le bouton droit de la souris sur référence et cliquez sur ajouter une référence et choisissez .net et recherchez system.configuration, sélectionnez un clic ok

0
Keshav Patel