497 votes

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 de référence et également mentionné avec l'utilisation. Mais il n'a toujours pas accepté l'assemblage.

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

Une autre chose étrange est le nom de l'assemblage qui est affiché comme "System.configuration", un c minuscule qui n'est pas la façon dont les noms sont affichés pour les autres assemblages du 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>

1 votes

Pouvez-vous ajouter un code ? Que voulez-vous dire par "il n'accepte pas l'assemblage" ? Obtenez-vous un message d'erreur spécifique ?

859voto

Kieran Points 4268

Il n'est pas seulement nécessaire d'utiliser le espace de noms System.Configuration . Vous devez également ajouter la référence à la montage System.Configuration.dll par

  1. Cliquez avec le bouton droit de la souris sur le Références / Dépendances
  2. Choisissez Ajouter une référence
  3. Trouver et ajouter System.Configuration .

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

using System.Collections.Specialized;

2 votes

+1 Merci Kieran. Savez-vous pourquoi cela doit être fait alors que la plupart des autres assemblages peuvent simplement être appelés en incluant l'instruction "using" ?

14 votes

Voici ce que j'ai compris : il se peut que ce soit faux. Lorsque vous ajoutez la référence, vous demandez à la dll d'être copiée dans le dossier bin lors de la compilation/du build. Certaines dll considérées comme essentielles sont ajoutées lors de la création du projet, c'est-à-dire lorsque vous allez dans Fichier->Nouveau projet, de sorte que les références sont mises en place à ce moment-là. Elles doivent toutes passer par le même processus, mais certaines sont faites pour vous et d'autres doivent être faites manuellement. Vous pouvez le tester en supprimant la référence à votre dll système et regarder tout votre code échouer. =)

7 votes

OK. J'ai donc fait un peu plus de recherche et j'ai trouvé que ce qui précède est en grande partie vrai. Cependant, certains fichiers n'auront pas besoin d'être écrits dans le dossier bin à l'exécution car ils sont dans le Global Assembly cashe (GAC), où bin est le cashe d'assemblage local. Comme le fichier System.dll.

100voto

Rameez Points 71

Dans votre projet, faites un clic droit, Ajouter une référence... dans l'onglet .NET, trouvez l'élément System.Configuration nom du composant et cliquez sur OK.

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

Notez qu'une DLL peut avoir n'importe quel espace de nom, donc le fichier System.Configuration.dll pourrait, en théorie, avoir l'espace de nom Some.Random.Name . Par souci de clarté et de cohérence, ils sont généralement identiques, mais il existe des exceptions.

42voto

pencilslate Points 2795

Ok ça a marché après avoir redémarré le VSTS. Le site lien a proposé une solution pour le même problème. J'aurais aimé la voir avant :)

17 votes

Plus de 7 ans plus tard, c'est toujours une honte de constater que c'est souvent la réponse.

4 votes

Rien de tel que de marquer sa propre réponse comme étant la réponse, alors qu'elle ne l'est pas. Dommage que les mods ne puissent pas l'éditer pour la bonne réponse. Le mec a marqué sa propre réponse pour les points....

1 votes

@ggiaquin16 vous n'obtenez pas les points si vous vous acceptez ;)

9voto

Emu Points 31

J'ai trouvé une meilleure solution pour ce problème. configurationmanager does not exist in the current context .

Pour une chaîne de connexion de lecture de web.config nous devons utiliser ConfigurationManager et sa méthode. Si vous voulez l'utiliser, vous devez ajouter l'espace de nom en utilisant System.Configuration ;

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

ConfigurationManager.ConnectionStrings["ConnectionSql"].ConnectionString;

6voto

Dan Diplo Points 16133

Êtes-vous sûr d'avoir ajouté une référence à l'assemblage .NET et pas à autre chose ? Je supprimerais votre référence puis j'essaierais de la réinsérer, en m'assurant que vous sélectionnez l'onglet .NET dans le dialogue de référence de Visual Studio - la dernière version devrait être 2.0.0.0 dans le GAC.

0 votes

Détails de l'assemblage depuis la fenêtre de la propriété : Nom : System.configuration Chemin : C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.configu ration.dll Version : 2.0.0.0 Runtime Version : v2.0.50727 Quelque chose vous semble suspect ? Merci !

0 votes

Non, c'est exactement comme prévu. C'est vraiment étrange - je suis désolé, mais je n'ai jamais vu cela auparavant. Bonne chance !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X