2016-11-24 2 views
1

Ici, nous avons une application de bureau winforms utilisée par divers utilisateurs. Chaque utilisateur exécute l'application localement. Cela dit les dossiers de construction sont séparés pour chaque utilisateur. Ils ont également un ensemble différent de clés de configuration sous leurs fichiers de configuration d'application locale pour exécuter l'application (différentes chaînes de connexion et options de clé). Vous pouvez deviner à quel point les versions de mise à jour sont douloureuses.Fichiers de configuration séparés pour des utilisateurs distincts

Mon but est de placer cette application de bureau winforms dans un dossier partagé et de la partager avec chaque utilisateur. Le défi ici est que leurs configurations soient séparées.

J'ai essayé de fusionner les clés séparées avec des noms différents et en utilisant les conditions sous le code, mais le travail semble massif.

Existe-t-il un moyen de collecter tous ces fichiers de configuration séparés sous le dossier bin et de basculer entre eux en fonction du nom d'utilisateur? Quelle est la manière la plus simple d'aborder ce problème?

Merci.

+0

L'application utilise-t-elle une connexion à la base de données? Il serait bon de configurer toutes les valeurs spécifiques à l'utilisateur dans une table de base de données centrale et de les mapper lors de l'initialisation de votre application. –

+0

Je suggère la base de données Portable SQLite, pour un tel cas pour stocker les paramètres pour chaque utilisateur. Note: Demande besoin d'autorisation d'accès pour lire la base de données SQLite d'écriture – GauravKP

+0

@SouvikGhosh merci pour votre suggestion. Même les clés de la base de données ont des valeurs différentes en raison de différents pilotes de connexion par ordinateur, ce qui pourrait ne pas être la meilleure approche. –

Répondre

0

Ma proposition consiste à utiliser un mécanisme de paramètres .NET modifié. En général, vous pouvez définir des paramètres spécifiques à l'application et à l'utilisateur. Dans ce cas, nous aimerions utiliser les paramètres de l'utilisateur.

Le problème avec cette approche est que les paramètres utilisateur ne sont pas stockés dans le dossier bin, mais ailleurs dire % userprofile% \ AppData \ Local ... (here sont des détails). Toutefois, vous pouvez remplacer ce comportement en écrivant un fournisseur de paramètres personnalisé. Heureusement, quelqu'un l'a déjà fait. CustomSettingsProvider à partir de ce answer fonctionne comme un charme.

Pour résumer voici une solution:

  • Pour ajouter un fichier de paramètres à votre projet cliquez droit sur le projet puis sélectionnez Ajouter -> Nouvel élément ... finnally, trouver Fichier de paramètres. Si vous double-cliquez sur le fichier ajouté, un concepteur apparaîtra. Supposons que ce fichier s'appelle MySettings.
  • Définir certains paramètres spécifiques à l'utilisateur.

  • Ajoutez CustomSettingsProvider à votre projet.

  • Trouvez MySettings classe dans le projet et ajoutez l'attribut suivant à elle:

[System.Configuration.SettingsProvider(typeof(CustomSettingsProvider))].

  • Avant d'utiliser les paramètres, vous devez spécifier un chemin d'accès à un fichier avec eux. Je suggère de le faire comme l'une des premières choses dans votre demande. Dans les paramètres exemple suivant les fichiers créés dans un dossier en cours et leurs noms contiennent un nom d'utilisateur:

MySettings.Default.SettingsKey = [email protected]".\user_{Environment.UserName}.config";

  • Si un fichier avec les paramètres n'existe pas CustomSettingsProvider va créer un vide.
  • Lors de la fermeture de l'application, appelez MySettings.Default.Save(); pour enregistrer les paramètres utilisateur dans un fichier.
  • Exécutez votre application une seule fois simplement pour créer un fichier modèle. Ensuite, faites une copie de ce modèle pour les autres utilisateurs en changeant leurs noms en conséquence.
  • L'inconvénient de mon approche est que vous n'aurez pas de section de chaînes de connexion dans le fichier de paramètres. Donc, référence à ConfigurationManager.ConnectionStrings, vous devrez remplacer par des références à MySettings.PropertyWithConnectionString.
+0

Merci pour la suggestion détaillée. Je vais essayer cette approche. Je vous tiendrai au courant et déciderai de marquer votre réponse en conséquence. –

+0

J'ai suivi une approche différente. Je ne suis pas passé par ces étapes. J'accepterai la réponse pour vos efforts. Je vous remercie. –