57 votes

ConfigurationManager.AppSettings devient nul ?

Je ne m'en suis pas rendu compte : j'avais un web.config dans une bibliothèque de classe séparée et que je lisais les paramètres de l'application web.config depuis une autre application web.

J'utilise VS2010 target framework 3.5.

Je ne sais pas ce qui ne va pas ici mais j'obtiens null quand j'essaie d'obtenir ConfigurationManager.AppSettings["StoreId"];

private string _storeid = GetStoreId;

public static string GetStoreId
{
    get
    {
        return ConfigurationManager.AppSettings["StoreId"];
    }
}

web.config :

<appSettings>
    <add key="StoreId" value="123" />
</appSettings>

0 votes

C'est dans votre application principale ? Dans une bibliothèque de classes ? Dans une application web ou un site web ?

0 votes

Bonjour @Nick, pouvez-vous réviser la bonne réponse ? Cela fait 7 ans et j'ai posté une meilleure solution.

65voto

RecoJohnson Points 300

Si vous êtes TESTS UNITAIRES vous avez besoin UNE COPIE de la APP.CONFIG à l'intérieur de la PROJET DE TEST UNITAIRE

5 votes

Au moins, faites un au fichier de raccourci App.Config - en général vous ne devez jamais dupliquer les fichiers de code sauf via un système de contrôle de version. Si vous le pouvez, essayez de le faire avec DI et en simulant l'App.Config dans vos tests unitaires.

3 votes

C'était la solution à mon problème. J'ai dû extraire les balises de mon web.config et les placer dans l'app.config entre la branche <configuration>. Une fois que j'ai fait cela, mes tests unitaires ont commencé à fonctionner à merveille.

1 votes

Pourquoi devons-nous descendre si bas pour obtenir cette réponse ? Quelqu'un peut-il la déplacer vers le haut ?

23voto

Jeremy Thompson Points 14428

Problème

La cause habituelle de ce phénomène est due au contexte.

Cause

Lorsque vous disposez d'une solution avec deux projets, si les App/Web.Config est dans le projet principal, cela ne fonctionnera pas si le contexte de l'application en cours d'exécution est le second projet, comme une bibliothèque, un test unitaire, etc.

Conundrum

Pour lire les valeurs de la configuration dans d'autres projets (avec System.Configuration ) vous devrez déplacer/copier le fichier de configuration vers le projet avec le contexte en cours. Malheureusement, la duplication des fichiers va à l'encontre des principes d'une bonne programmation : OOP, gestion du code source, SOLID, etc.

Cool Solution

Une solution astucieuse consiste à ajouter des raccourcis de fichiers de configuration dans d'autres projets afin de ne mettre à jour qu'un seul fichier :

enter image description here

Ce serait bien de diviser le contenu de la section config des fichiers à travers les projets. De manière élégante, comme le partage des fichiers d'assemblage selon la réponse n°2 : https://stackoverflow.com/a/15319582/495455 mais hélas c'est par contexte

11voto

eRaisedToX Points 1380

Avis de non-responsabilité ;) Ce message n'est pas destiné à répondre à l'OP car il est trop tard, mais il pourrait certainement aider les lecteurs qui arrivent sur cette page.

Problème auquel j'ai été confronté : ConfigurationManager.AppSettings["uName"] en retournant sur null dans mon projet d'api web C#.

Les choses de base que j'ai vérifiées :

1) En code ConfigurationManager.AppSettings["uName"] J'ai utilisé la clé exacte. uName comme je l'avais fait dans web.config fichier,

i.e

<appSettings>
      <add key="uName" value="myValue" />
</appSettings>

Vérifié que je n'ai pas mal tapé comme userName au lieu de uName etc.

2) Comme il s'agit d'un API Web il y aurait un fichier comme web.config au lieu de app.config et cela aussi en Dossier racine de votre projet. [voir l'image].

enter image description here

Solution :

La solution qui a fonctionné pour moi ,

Modifié ConfigurationManager.AppSettings["uName"] a WebConfigurationManager.AppSettings["uName"]

et

s'est assuré que j'avais

<appSettings>
          <add key="uName" value="myValue" />
</appSettings>

dans le droite fichier ie.

Le bon fichier est pas web.config dans le dossier View

ni le web.config de débogage ou de version

enter image description here

8voto

Darin Dimitrov Points 528142

Et :

<appSettings>
    <add key="StoreId" value="123" />
</appSettings>

est situé dans le web.config de votre application ASP.NET et non pas dans une quelconque app.config que vous avez ajouté à votre projet de bibliothèque de classes dans Visual Studio, n'est-ce pas ? Vous ne pouvez pas obtenir null si c'est le cas. Si vous l'avez ajouté à un app.config de votre projet de bibliothèque de classes dans Visual Studio, l'obtention de null est un comportement parfaitement normal.

0 votes

Il est situé à web.config dans mon application web

7 votes

Il est intéressant de noter que si vous avez un harnais de test qui exécute le code, alors son Le fichier app.config doit contenir le paramètre que vous recherchez.

2voto

zaheer ahmad Points 75

Je viens de recevoir la réponse que les DLL sont appelées à partir d'un autre projet et non dans le projet où elles sont créées. Les entrées dans App.config doivent être déplacées vers le fichier de configuration du projet appelant.

Par exemple, j'ai 2 projets dans ma solution, une bibliothèque de classe et une application console. J'ai ajouté la référence de la bibliothèque de classe dans l'application console. Donc, si j'ajoute le fichier app.config dans le projet de la bibliothèque de classe, il y a une exception nulle, mais cela fonctionne lorsque j'ai ajouté le fichier app.config dans l'application console.

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