2009-12-16 3 views
3

J'utilise un fichier app.config pour stocker les paramètres dynamiques de mon application. Le problème est, quand je change une valeur dans le fichier app.config, et démarre l'application, il ne charge pas la nouvelle valeur du fichier de configuration. On dirait que les valeurs du fichier app.config sont en train d'être lues et incorporées dans le fichier exe seulement au moment de la compilation!Les modifications dans App.config ne se reflètent pas après le redémarrage de l'application

Voici comment je l'ai lu le fichier de configuration:

public class Helper 
{ 
    static Helper() 
    { 
     Foo = ConfigurationManager.AppSettings["Foo"]; 
    } 
    public static string Foo { get; set; } 
} 

Est-ce que je manque quelque chose?

+0

pouvez-vous poster le contenu de app.config? –

+1

aussi quel fichier change le contenu de? App.config? ou le .exe.config dans le même répertoire que l'application est en cours d'exécution? –

+0

Je modifie le contenu du fichier App.config à la main. Je posterai la structure de mon fichier app.config en réponse à ce message. – Meysam

Répondre

20

Êtes-vous sûr de vouloir changer le bon fichier? Vous ne voulez pas modifier le fichier app.config, mais le fichier <exename>.exe.config, dans le même répertoire que le fichier .exe

Le fichier app.config est ce que vous éditez dans l'ide, mais lorsque vous compilez votre application Le fichier est renommé <exename>.exe.config et copié dans le répertoire de sortie lors de la compilation. Le fichier .exe recherche un fichier portant le même nom que lui avec l'extension .config lors de la recherche de la configuration par défaut.

0

Avez-vous fait un IISReset?

En outre, il y a le cache de Microsoft.NET situé dans

WINDOWS\Microsoft.NET\Framework\vXXXXX\Temporary ASP.NET Files. 

Je supprimerais les données de ce dossier.

+0

Veuillez noter qu'il ne s'agit pas d'une application asp.net. C'est une application Windows et n'a rien à voir avec IIS. – Meysam

1

La nature statique de votre classe et de votre méthode peut vous causer le problème. factoriser Peut-être à la suite ...

public static class Helper 
{ 
    public static string Foo 
    { 
     get 
     { 
      return ConfigurationManager.AppSettings["Foo"]; 
     } 
    } 
} 

En fait, penser, il ne vous aide pas beaucoup évolué depuis ConfigurationManager.AppSettings["Foo"] est déjà (efficace) un appel statique - vous êtes juste d'ajouter une autre couche de abstraction qui peut ne pas être nécessaire.

+0

Oui, vous avez raison, je suppose que cela pourrait être dû à la nature des propriétés statiques. Juste trois poinsts: 1) Je l'ai fait statique afin qu'il ne soit pas lu à partir du fichier de configuration chaque fois que je lis la propriété. 2) Mon approche fonctionne beaucoup dans le fichier web.config dans les applications web 3) Dans le cas où c'est le problème de la propriété statique, où sont gardées les valeurs après avoir fermé l'application et redémarré? – Meysam

+0

Ils sont stockés dans le fichier de configuration. La question originale a un setter dans le membre, mais IIRC vous ne pouvez pas placer des paramteers app.config du code (à moins que le comportement ait changé et je l'ai manqué) – ZombieSheep

+0

Je n'essaye pas de changer la valeur dans le fichier app.config du code . Je change juste la valeur à la main. Je ne sais pas pourquoi ce changement ne se reflète pas la prochaine fois que je lance l'application. Même si je renommer ou supprimer le fichier app.config, le fichier exe fonctionne grandement! comme s'il n'y avait pas besoin de lire le fichier de configuration à nouveau. Comme je l'ai dit, il semble que les valeurs clés dans le fichier app.config sont seulement lues à la compilation et intégrées dans le fichier exe. – Meysam

Questions connexes