J'ai le problème suivant: J'introduit une nouvelle fonctionnalité dans l'application (exécutée en tant que service Windows) et j'aimerais avoir cette nouvelle fonctionnalité contrôlée (activée / désactivée) à l'aide d'une entrée de fichier de configuration ( La question est la suivante: y a-t-il une construction de mécanisme dans .NET qui répond à ce problème? Je suppose que je pourrais créer mon propre fichier de configuration, puis utiliser fichiersystemwatcher code> etc ... mais peut-être .NET permet d'utiliser des fichiers de configuration externes et de rechargera la valeur ?? P>
static void Main(string[] args)
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
for (int i = 0; i < 10; i++)
{
ConfigurationManager.RefreshSection("appSettings");
AppSettingsSection appSettingSection = (AppSettingsSection)config.GetSection("appSettings");
string myConfigData = appSettingSection.Settings["myConfigData"].Value; // still the same value, doesn't get updated
Console.WriteLine();
Console.WriteLine("Using GetSection(string).");
Console.WriteLine("AppSettings section:");
Console.WriteLine(
appSettingSection.SectionInformation.GetRawXml()); // also XML is still the same
Console.ReadLine();
}
}
3 Réponses :
Une fois que le fichier APP.Config d'origine est chargé, ses valeurs sont mises en cache afin que vous sachiez, vous devrez redémarrer l'application. Le moyen de créer un nouvel objet de configuration et de lire les touches manuellement comme ceci:
var appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); string myConfigData = appConfig.AppSettings.Settings["myConfigData"].Value;
Merci! Mais toujours: de cette façon chaque fois que j'accède à MyConfigdata, je devrais créer un nouvel objet de configuration pour être sûr que appconfig.appsettings.Settings ["myconfigdata"]. La valeur est cohérente avec la valeur sous-jacente dans l'app.config.
Juste appelez configurationmanagerager.refresection ("appsettings"); code> avant d'appeler
appconfig.appsettings.Settings ["myconfigdata"]. Valeur; code> qui obligera l'application à lire le nouveau & Modification des paramètres. Sinon,
ConfigurationManager code> ne cache toutes les valeurs.
@Teomansoygul Actualisection Code> Mises à jour d'appel Valeur récupérée via le
ConfigurationManager.AppSettings [] code> Cela n'affecte pas une instance de configuration.
Si vous traitez la configuration manuellement (peut-être pas dans le fichier app.config), vous pouvez vérifier périodiquement ce fichier pour les mises à jour. P>
FileSystemwatcher code> est ... probablement surkill et n'est pas garanti dans tous les scénarios. Personnellement, je voudrais juste interroger le fichier tous les 30 secondes. P>
Bonjour, voulez-vous dire la mise en commun en utilisant une solution décrite par @teoman Soygul. Je rechargeant ce réglage toutes les 1 minute satisferait mes besoins.
@dagonfly bien, sorte de; Bien que je ne puissiez pas nécessairement utiliser le chemin d'application de configuration. Toute route fonctionnera cependant; Cela n'a pas besoin d'être complexe.
rafraîchissez simplement les "appSettings" dans le fichier de configuration actuel avant de lire la valeur: pas besoin de le compliquer en créant une autre configuration ou configuration ou ce qui a donc été suggéré dans votre question ou d'autres réponses! p> p>