app.config – Comment forcer le chargement depuis un fichier lors de l’exécution?

J’ai créé une application de ligne de commande et transféré une grande partie de sa configuration dans un fichier de parameters standard. Tous les parameters sont déclarés en tant que Scope = Application, car la logique de l’application ne contient aucun élément spécifique à l’utilisateur. J’accède aux valeurs à travers le code avec

Properties.Settings.Default. 

Cela fonctionne bien car il fonctionne automatiquement sur un calendrier. La mise à jour des valeurs dans le fichier de configuration est reflétée dans la sortie.
Quelque temps plus tard, j’ai créé une interface graphique de base (dans le même espace de noms) pour lancer directement l’application en ligne de commande (via un constructeur séparé). Je n’ai pas fait beaucoup de programmation .Net, mais j’utilise essentiellement mon application CLI comme une DLL (je ne sais pas s’il existe un terme approprié pour cela; dans mon dossier de sortie, tout ce dont j’ai besoin, c’est d’une interface graphique. exe, CLI.exe et CLI.exe.config et cela fonctionne). Cependant, j’ai remarqué que lorsqu’il est lancé de cette manière, le fichier CLI.exe.config n’est pas chargé. l’application CLI utilise uniquement ses valeurs par défaut compilées. J’espérais que la méthode du fichier de configuration fonctionnerait dans ce cas.
J’ai essayé les méthodes suivantes pour forcer le chargement du fichier de configuration mais, jusqu’à présent, j’ai tracé un blanc:

1:

 ConfigurationManager.RefreshSection("appSettings") 

2:

 ExeConfigurationFileMap configFile = new ExeConfigurationFileMap(); configFile.ExeConfigFilename = Path.Combine(Environment.CurrentDirectory, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".exe.config"); ConfigurationManager.OpenMappedExeConfiguration(configFile, ConfigurationUserLevel.None).Save(ConfigurationSaveMod.Modified); ConfigurationManager.RefreshSection("appSettings"); 

3:

 Properties.Settings.Default.Reload(); 

Aucune de ces erreurs ne génère d’erreur, mais le fichier Properties.Settings.Default.Value j’ai modifié dans le fichier de configuration n’est pas mis à jour. Y at-il un moyen d’accomplir ce dont j’ai besoin ici?

Edit: voici un exemple de mon fichier CLI.exe.config si cela peut aider à illustrer ce que j’essaie d’accomplir ici:

     
https://cloud.mycompany.com/ /inventory.aspx#view/Invoice/ ...

Je dois également mentionner que j’ai également essayé ‘applicationSettings’ à la place de ‘appSettings’ dans le code ci-dessus.

Assurez-vous que le modificateur d’access a été défini sur public. Le lancement avec ‘GetExecutingAssembly’ ne chargera pas la configuration CLI si elle a été déclenchée par GUI.EXE depuis que c’est l’assembly en cours d’exécution. regarde ça:

Accéder à la configuration de l’application à travers les exe

Le fichier de config qui contiendra vos parameters d’exécution dépendra du point d’entrée de votre application.

Si vous démarrez votre CLI.exe directement, il utilisera un fichier de parameters utilisateur dans un sous-dossier du dossier de données de l’application locale de l’utilisateur, similaire à:

 AppData\Local\CLI\CLI.exe\1.2.3.4\user.config 

Toutefois, si vous utilisez un point d’entrée différent ( CLI.exe ), qui fait référence à GUI.exe , tous les appels à Properties.Settings utiliseront une instance complètement différente de user.config , située dans (quelque chose comme):

 AppData\Local\GUI\GUI.exe\1.2.3.4\user.config 

Le fichier de parameters au niveau de l’application ( .exe.config ) placé dans votre dossier de sortie, à côté de l’exécutable, fournit uniquement les parameters par défaut pour ces parameters utilisateur ou les parameters d’application en lecture seule. Autoriser l’application à écrire dans ce fichier signifierait qu’elle disposerait d’un access en écriture aux sous-dossiers de Program Files , ce qui n’est pas possible sans permissions élevées.

La solution la plus simple pour obtenir les mêmes parameters utilisateur lorsque vous modifiez votre point d’entrée consiste à copier le fichier user.config dossier de données de l’application CLI dans le dossier approprié pour le nouveau point d’entrée.

(mise à jour pour le réglage de l’application)

Il fonctionne de la même manière pour les parameters d’application (fichiers .config dans votre dossier de sortie). Si vous aviez à l’origine:

      
Some CLI user setting Some CLI app setting

Et votre GUI.exe.config était:

     
Some GUI user setting Some GUI app setting

Ensuite, votre fichier .config résultant doit contenir toutes les sections:

     
Some GUI user setting Some CLI user setting Some gui app setting Some CLI app setting

(Il est possible que je mélange certaines valeurs en écrivant ceci, mais vous voyez l’idée).

Il y a aussi un outil que j’ai trouvé en cherchant sur Google: XmlConfigMerge sur CodeProject – je ne l’ai pas essayé, mais il fait probablement la même chose automatiquement. Vous voudrez peut-être le vérifier et l’inclure dans vos scripts de construction.