2010-01-31 8 views
17

Nous avons créé une application WinForms et stockons quelques configurations via la classe ConfigurationManager. Pour stocker les informations que j'utiliseQuand est-ce qu'un app.config est créé, quand un app.exe.config et quelle est la différence

Configuration pConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
pConfig.AppSettings.Settings.Add("updates", szUpdatesURL); 
pConfig.Save(ConfigurationSaveMode.Modified); 

Le problème ici est que, dans certaines occasions, l'application crée un fichier .config « appname » et dans d'autres occasions un exe.config « appname ».

Ici, je dois noter qu'un fichier de configuration n'est pas livré par défaut car il n'est pas toujours requis.

Les configurations sont sauvegardées lors de la première exécution du programme. Cela nous a causé un problème, et je ne peux pas spécifier les occasions où l'un ou l'autre est créé.

J'ai effectué les tests, sur le même PC, avec exactement le même .exe et j'obtiens les deux résultats. Que se passe t-il ici?

Quelle est la différence entre les deux, et comment puis-je spécifier lequel doit être créé? Un grand merci

+0

Y at-il une raison pour laquelle vous ne pouvez pas envoyer un fichier de configuration vide? – Paolo

+0

@Paolo Pas vraiment, mais le problème est que nous avons d'abord déployé de cette façon, et le besoin d'un fichier de configuration, est venu sur une version ultérieure. Cela pose donc des problèmes aux utilisateurs d'anciennes versions qui tentent de mettre à niveau. –

Répondre

21

Le fichier "appname.exe.config" est automatiquement créé pour vous lorsque vous compilez votre application. C'est le fichier qui devrait être distribué à vos utilisateurs finaux (avec le fichier exe, bien sûr). Les paramètres que vous définissez dans appname.config sont transférés vers appname.exe.config. They are essentially the same files. La raison appname.config existe parce que lorsque le fichier exécutable est exécuté, son fichier de configuration est simple le nom de l'exécutable avec un suffixe .config. Cependant, si le nom de l'exécutable a changé, vous devrez changer le nom du fichier exe.config manuellement. Par conséquent, en renommant automatiquement au l'heure de compilation, le app.config peut changer son nom en fichier newappname.exe.config et le CLR le récupérera toujours. Vous trouverez probablement que le fichier appname.exe.config est créé dans le répertoire bin. J'espère que c'est clair :) Les liens ci-dessous peuvent l'expliquer un peu plus en profondeur.

Il y a une bonne explication here. Une autre bonne lecture est sur CodePlex.

+0

Merci. Cependant, ma principale préoccupation est que je ne livre pas de fichier de configuration avec l'exe par défaut. Dans certaines occasions, le programme crée un fichier de configuration. Et dans ces cas est où j'ai le problème où parfois il crée par exemple "Appname" .config et d'autres fois il crée "Appname" .exe.config. C'est ce qui m'a dérouté, puisque j'ai compris que le nom de fichier des paramètres par défaut devrait être * .exe.config –

+0

A partir des tests que j'ai effectués, je n'ai pas trouvé de conclusion selon quand en fait le "appname" .config est en fait généré. Cependant, il est évident que pour éviter de telles confusions, nous devrions envoyer un "appname" .exe.config par défaut. –