2011-10-11 5 views
2

J'ai une application web à trois niveaux qui produit trois dll distinctes:Pourquoi la valeur app.config est-elle nulle?

  • Web.UI.dll
  • Web.Application.dll
  • Web.DAL.dll

deux Web.Application.dll et Web.DAL.dll ont leur propre app.configs. J'ai besoin d'accéder à un paramètre spécifique qui vit dans web.config. J'utilise le code suivant:

[CacheUtil.cs] 
string cacheName = ConfigurationManager.AppSettings.Get("CacheName"); 

J'ai vérifié que ce réglage existe. Alors, pourquoi alors, quand je cours, je reçois NULL? Est-ce que CacheName doit exister dans tous les fichiers .config?

Voici la mise en web.config:

<appSettings> 
    <add key="CacheName" value="staging"/> 

Pour votre information, CacheUtil est un singleton qui est paresseux initialisé lors du premier accès. Le premier accès est en cours dans le projet DAL.dll.

Merci!

Répondre

4

Seul web.config est en cours de lecture. Les autres fichiers de configuration (Web.Application.dll.config et Web.DAL.config) sont et non lus.

La configuration n'est pas attachée aux bibliothèques; que pour l'exécution de l'être exécutable final (le AppName.exe.config ou web.config)

projets dans Visual Studio qui produisent un EXE peut avoir un fichier app.config, et ce fichier est traitée spécialement sur la construction; Il est renommé ProgramName.exe.config et copié dans le répertoire de sortie. app.config dans la bibliothèque de classes ou les projets d'application Web n'auront aucun effet.

+0

Hmm, curieux. Il semble bien lire en mode débogage, mais pas après la publication. Donc, les app.configs sont dénués de sens? –

+0

'app.config' est destiné aux projets qui produisent un fichier EXE. Une partie du processus de construction est qu'il est renommé en 'ProgramName.exe.config' et copié dans le répertoire de sortie. Les applications Web sont différentes: au lieu de rechercher "ProgramName.exe.config", elles recherchent "web.config". Avoir des fichiers 'app.config' dans un projet de bibliothèque de classes n'a aucun sens, sans copier les valeurs contenues dans un fichier de configuration approprié. –

1

Essayez ceci:

cachename = ConfigurationManager.AppSettings["CacheName"]; 

Ceci est prévu que vous essayez de lire AppSettings sur le fichier app.config du projet. Vous ne pouvez pas lire la configuration d'un autre projet sauf si vous utilisez une autre logique, mais pas via la classe ConfigurationManager. Cela devrait être des E/S normales.

Questions connexes