2011-01-20 5 views
3

J'ai une solution qui contient deux projets. Un projet est un service Windows qui contient quelques classes pour exécuter diverses fonctions. L'autre projet est une application Windows Form qui est destinée à effectuer diverses tâches de test et d'exécution que le service accomplit à la demande. Par exemple, le service effectuera quelques tâches différentes à un certain intervalle de temps, mais si vous souhaitez effectuer l'une de ces tâches avant que l'intervalle de temps ne soit écoulé, vous pouvez charger l'application Windows Forms et exécuter une tâche immédiatement. L'application Windows Form (désignée ici sous le nom de testeur) référence le projet Windows Service (à partir d'ici appelé Service). Lorsque le testeur se charge, il crée une instance de l'une des classes du service. Chaque fois que des boutons sont pressés pour effectuer la tâche, il référence cette instance qui a été créée et appelle les différentes méthodes de la classe. Le service utilise les paramètres d'application pour la configuration et dispose donc d'un app.config. Les paramètres de configuration sont accessibles à l'aide de [ProjectName] .Properties.Settings.Default. [SettingName]. Lorsque les paramètres de configuration du testeur sont modifiés sur son propre app.config (ou exe.config après la publication), les paramètres sont actualisés sans problème. Si le testeur est fermé, la configuration est modifiée, puis rouvert, les nouveaux paramètres seront remplis. Si la méthode Reload est appelée dans les paramètres, la configuration est actualisée sans problème. Le service fonctionne de la même manière. Les paramètres de configuration peuvent être mis à jour sans problème.Problèmes .NET App.Config sur plusieurs projets

Le problème est que si des changements de configuration doivent être faites sur le service, lorsque les méthodes de service sont appelés à partir du testeur, la configuration ne prend pas les nouveaux paramètres. Quels que soient les paramètres du projet, ils seront utilisés. Je n'arrive pas à faire reconnaître par le testeur que le fichier app.config/exe.config du service a changé et que la nouvelle configuration doit être rechargée et utilisée à la place de la configuration utilisée lors de la création du projet dans Visual Studio. Peut-être que je ne suis pas suffisamment éduqué sur ce sujet, mais il me semble que le app.config est enroulé dans le fichier .exe créé par le Service à chaque fois qu'il est construit.

J'ai essayé encapsulant la méthode Recharger pour le service et de l'appeler, et il ne semble pas faire une différence.

J'ai un exemple de projet qui fonctionne comme décrit ci-dessus à un niveau très basique. L'objectif idéal est de pouvoir modifier le fichier ou les fichiers exe.config à la volée et de faire en sorte que le Service et le Testeur les récupèrent sans problème. Si vous souhaitez voir exactement ce que je veux dire d'un point de vue codage, un exemple de projet peut être trouvé ici: example solution

Toute aide serait grandement appréciée. Merci pour votre temps.

Mise à jour

J'ai réussi à trouver une solution à cela, mais je suis toujours curieux de savoir s'il y a une meilleure façon. En utilisant un app.config qui est partagé entre les deux projets et en utilisant le Gestionnaire de configuration au lieu des paramètres d'application, tout fonctionne comme prévu. Je préfère utiliser les paramètres de l'application, dans la mesure du possible; cependant, il fonctionnera pour utiliser un app.config partagé et le gestionnaire de configuration pointé vers ce app.config.

Répondre

0

Une option est d'avoir les deux programmes se chargent du même fichier de configuration:

http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.openexeconfiguration.aspx

+0

J'ai essayé de jouer avec le ConfigurationManager et la fonctionnalité que vous avez mentionnée ci-dessus, mais cela ne semblait pas fonctionner comme j'en avais besoin. Je n'utilise pas le gestionnaire de configuration pour obtenir mes valeurs de configuration, j'utilise les paramètres d'application, donc une instruction using à l'espace de noms lui-même est en haut de la classe et les options de configuration sont accédées comme ceci: [ProjectName] .Properties.Settings. Par défaut. [SettingName] Merci pour votre réponse si. Avez-vous d'autres idées ou est-ce possible que j'ai mal compris votre réponse? – ctchristmas

0

trouvé la solution. Un app.config doit être ajouté à la solution comme décrit ci-dessus dans ma mise à jour. Une fois lié comme cela, vous pouvez ajouter un fichier de paramètres au projet et ajouter des paramètres/configuration au projet et ils seront ajoutés au fichier de paramètres des solutions. Cela va se déplacer avec la construction et résoudre le problème que j'avais.

Questions connexes