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

468

J'essaie d'accéder à connectionStringspartir du fichier de configuration. Le code est ASP.NET + C #. J'ai ajouté System.Configurationà la référence et également mentionné à l'aide. Mais il n'accepterait toujours pas l'assemblée.

J'utilise VSTS 2008. Une idée quelle pourrait être la raison?

Une autre chose étrange est le nom de l'assembly affiché comme "System.configuration", un minuscule c 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>
crayon
la source
1
Pouvez-vous ajouter du code? Que voulez-vous dire par cela n'accepterait pas l'assemblée? Recevez-vous un message d'erreur spécifique?
Joshua Belden

Réponses:

820

Il n'est pas seulement nécessaire d'utiliser l' espace de noms System.Configuration . Vous devez également ajouter la référence à l' assemblage System.Configuration.dll , en

  1. Faites un clic droit sur les références / dépendances
  2. Choisissez Ajouter une référence
  3. Trouvez et ajoutez System.Configuration.

Cela fonctionnera à coup sûr. Aussi pour le NameValueCollectionvous devez écrire:

using System.Collections.Specialized;
Kieran
la source
1
+1 Merci Kieran. Savez-vous pourquoi cela doit être fait alors que la plupart des autres assemblys peuvent simplement être appelés en incluant l'instruction 'using'?
Dhaust
13
C'est ma compréhension: cela peut être faux. Lorsque vous ajoutez la référence, vous demandez que la DLL soit copiée dans le dossier bin lors de la compilation / génération. Certaines DLL vues comme core sont ajoutées lors de la création du projet, c'est-à-dire lorsque vous allez fichier-> nouveau projet afin que les références soient établies à ce point. Ils doivent tous passer par le même processus, juste que certains sont faits pour vous et d'autres que vous devez faire manuellement. Vous pouvez le tester en supprimant la référence à votre DLL système et en regardant tout votre code échouer. =)
Kieran
7
D'ACCORD. J'ai donc fait un peu plus de recherche et j'ai découvert que ce qui précède est surtout vrai. Cependant, certains fichiers n'auront pas besoin d'être écrits dans le dossier bin lors de leur exécution car ils se trouvent dans le Global Assembly cashe (GAC), où bin est le assembly local cashe. Comme System.dll.
Kieran
4
L'espace de noms 'System.Configuration' peut être trouvé dans la dll 'System', c'est pourquoi il peut y avoir quelques grattements de tête quand Intellisense accepte le 'using System.Configuration;' mais ne trouvera pas ConfigurationManager à moins que System.Configuration.dll ne soit référencé par le projet.
jaybro
99

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

using System.Configurationindique au compilateur / IntelliSense de rechercher dans cet espace de noms toutes 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'une DLL peut avoir n'importe quel espace de noms, donc le fichier System.Configuration.dllpourrait, en théorie, avoir l'espace de noms Some.Random.Name. Pour plus de clarté / cohérence, ils sont généralement les mêmes, mais il existe des exceptions.

Rameez
la source
40

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

crayon
la source
16
Plus de 7 ans plus tard et c'est toujours dommage à quelle fréquence c'est la réponse.
Rétablir Monica Cellio du
4
rien de tel que de marquer votre propre réponse comme la réponse, alors que ce n'est effectivement pas la réponse. Dommage que les mods ne puissent pas l'éditer pour la vraie réponse correcte. Mec a marqué sa propre réponse pour les points ....
ggiaquin16
1
@ ggiaquin16 vous n'obtenez pas de points si vous vous acceptez;)
JAD
@calios ou si vous lisez la question d'origine, vous pouvez voir que l'interrogateur avait déjà ajouté l'assembly au projet dans la première version de la question. Pour cet assemblage et cette version particuliers de VS, il était nécessaire de redémarrer l'IDE ou l'erreur continuerait simplement de se produire. qui était la solution. Les deux réponses très bien notées ici n'ont jamais été pertinentes pour la question posée, mais vous ne pensez pas à vous demander pourquoi quelqu'un répondrait à une question sans la lire au préalable. (dans la veine de faire des choses juste pour des points qui semblent très efficaces dans ce cas ...)
ebyrob
24

L'ajout de la System.Configurationréférence as à tous les projets résoudra ce problème.

  1. Allez à Project->Add Reference

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

  3. Dans la liste centrale, System.Configurationfaites défiler et assurez-vous que la case est cochée.

  4. Cliquez sur OK pour postuler et vous pourrez désormais accéder au ConfigurationManagercours.

calios
la source
19

Ajout de 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 Assemblages
  3. Recherchez 'System.Configuration'
  4. Cliquez sur OK.
Esther Lalremruati
la source
9

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 a été remplacée par System.Configuration! System.Configuration.ConfigurationManager.AppSettings»

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

  1. Ajoutez System.Configurationcomme référence à votre section Références .
  2. Ajoutez les deux usinginstructions suivantes en haut de chaque .csfichier class ( ):

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

Par ce changement, toutes les occurrences de

ConfigurationSettings.AppSettings["mySetting"]

référencera désormais le bon gestionnaire de configuration, et non plus le 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. À long terme, vous devriez envisager de refactoriser le code.

Mat
la source
9

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

Pour une chaîne de connexion en lecture, web.confignous devons utiliser la ConfigurationManagerclasse et sa méthode. Si vous souhaitez utiliser, vous devez ajouter un espace de noms en utilisant System.Configuration;

Bien que vous ayez utilisé cet espace de noms, lorsque vous essayez d'utiliser la ConfigurationManagerclasse, le système affiche une erreur «configurationmanager n'existe pas dans le contexte actuel». Pour résoudre ce problème:

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString; 
Émeu
la source
6

Êtes-vous sûr d'avoir ajouté une référence à l'assembly .NET et pas autre chose? Je supprimerais votre référence, puis j'essaierais de l'ajouter à nouveau, en vous assurant de sélectionner dans l'onglet .NET de la boîte de dialogue de référence de Visual Studio - la dernière version devrait être 2.0.0.0 dans GAC.

Dan Diplo
la source
Détails de l'assembly à partir de la fenêtre de propriétés: Nom: System.configuration Chemin: C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ System.configuration.dll Version: 2.0.0.0 Version Runtime: v2.0.50727 Quelque chose vous semble suspect? Merci!
pencilslate
Non, c'est exactement comme prévu. C'est vraiment étrange - je suis désolé, mais je n'ai jamais vu ça auparavant. Bonne chance!
Dan Diplo
6
  1. Faites un clic droit sur le projet
  2. Sélectionnez Manager NuGet Package
  3. Rechercher System.Configuration
  4. Sélectionnez System.Configuration.ConfigurationManager par Microsoft
  5. Installer

maintenant vous pouvez:

using System.Configuration;
Samir Morimoto
la source
4

Pour une vérification d'intégrité, essayez de créer un nouveau projet d'application Web, ouvrez le code derrière pour la page Default.aspx. Ajoutez une ligne dans▶Load pour accéder à votre chaîne de connexion.

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

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

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 ça ...

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

Ouais, c'est élémentaire je sais. Mais si vous n'avez pas de meilleures idées, il est parfois utile de comparer avec quelque chose de vraiment simple qui devrait fonctionner.

Nevada
la source
3

Installez simplement

Install-Package System.Configuration.ConfigurationManager -Version 4.5.0

puis utilisez

using System.Configuration;
Saad Lembarki
la source
2

Si ce code se trouve sur un projet distinct, comme un projet de bibliothèque. N'oubliez pas d'ajouter une référence à system.configuration.

Steve Rey
la source
0

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

Ike
la source
0

Pour résoudre ce problème, allez dans l'Explorateur de solutions Et cliquez avec le bouton droit sur la référence et cliquez sur Ajouter une référence et choisissez .net et trouvez system.configuration sélectionnez un clic ok

Keshav Patel
la source
0

Ajoutez le fichier du gestionnaire de configuration pour vous connecter à la base de données web.config

shyamu
la source