J'ai le problème suivant :
Nous avons une application qui charge des modules (add ons). Ces modules peuvent avoir besoin d'entrées dans l'app.config (par exemple, la configuration WCF). Comme les modules sont chargés dynamiquement, je ne veux pas avoir ces entrées dans le fichier app.config de mon application.
Ce que je voudrais faire est le suivant :
- Créer un nouveau app.config en mémoire qui incorpore les sections config des modules
- Dites à mon application d'utiliser cette nouvelle app.config.
Note : Je ne veux pas écraser l'app.config par défaut !
Il devrait fonctionner de manière transparente, de sorte que, par exemple ConfigurationManager.AppSettings
utilise ce nouveau fichier.
Lors de mon évaluation de ce problème, j'ai trouvé la même solution que celle proposée ici : Recharger app.config avec nunit .
Malheureusement, cela ne semble rien faire, car j'obtiens toujours les données à partir de l'app.config normal.
J'ai utilisé ce code pour le tester :
Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]);
Console.WriteLine(Settings.Default.Setting);
var combinedConfig = string.Format(CONFIG2, CONFIG);
var tempFileName = Path.GetTempFileName();
using (var writer = new StreamWriter(tempFileName))
{
writer.Write(combinedConfig);
}
using(AppConfig.Change(tempFileName))
{
Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]);
Console.WriteLine(Settings.Default.Setting);
}
Il imprime les mêmes valeurs deux fois, bien que combinedConfig
contient d'autres valeurs que le app.config normal.
0 votes
Héberger les modules dans des
AppDomain
avec le fichier de configuration approprié n'est pas une option ?0 votes
Pas vraiment, car cela entraînerait un grand nombre d'appels Cross-AppDomain, car l'application interagit assez fortement avec les modules.
0 votes
Que diriez-vous d'un redémarrage de l'application lorsqu'un nouveau module doit être chargé ?
0 votes
Cela ne correspond pas aux besoins de l'entreprise. De plus, je ne peux pas écraser l'app.config, car l'utilisateur n'a pas le droit de le faire.
0 votes
Vous rechargeriez un App.config différent, pas celui des fichiers du programme. Le hack dans
Reload app.config with nunit
pourrait fonctionner, sans certitude, s'il est utilisé à l'entrée de l'application avant le chargement de toute configuration.0 votes
Ce hack ne fonctionne pas avec le redémarrage de l'application, car il est censé modifier le app.config de l'application actuel domaine de l'application. En fait, ce que ce hack est censé faire est exactement ce que je veux. Mais cela ne fonctionne pas :(
0 votes
Je vais essayer de mieux l'expliquer, vous n'appliquerez pas le hack avant de redémarrer, vous redémarrerez pour pouvoir appliquer le hack avant que la configuration de l'application ne soit chargée, c'est-à-dire que le hack sera dans Main, et vous pourrez le signaler peut-être par un argument de ligne de commande.
0 votes
Je vois. Je suppose que ça pourrait marcher. Mais redémarrer n'est pas une option, malheureusement...
0 votes
@João : J'ai trouvé une solution. Veuillez consulter ma réponse, si vous êtes intéressé.