Question

Mes applications ont une poignée de fichiers de configuration, chacun en particulier à la machine, il est en cours de déploiement à (dev, production, etc.) Je suis désireux de les ajouter au projet d'installation, utilisez les boutons radio pour sélectionner un puis un script (ou peut-être une action personnalisée?) renommer les fichiers sélectionnés connectionStrings.config, settings.config, etc.

Est-ce possible / possible avec un projet d'installation?

Pour vous donner une idée, mes configs pourrait ressembler à ceci:

DEV connectionStrings.config
PROD connectionStrings.config

Une fois que l'utilisateur choisit DEV ou PROD dans l'installateur interface radiobutton, je voudrais que la configuration choisie pour être renommé

connectionStrings.config

Considérant qu'il est un projet d'installation VS, je sens que je demande beaucoup trop et que je vais obtenir une réponse intéressante que la plupart des questions du projet d'installation font:)

Était-ce utile?

La solution

Je suis venu à la conclusion que cela est dû impossible de VS cruellement défaut sur les options de configuration du projet d'installation. Au lieu de cela, j'ai ajouté un bouton de commande radio au cours du processus d'installation et les choix assigné un nom variable. Dans le système de fichiers, j'ai ajouté tous mes fichiers de configuration puis définissez les conditions à chacun. Ils référencés valeurs à mes choix de boutons radio afin de copier pendant le déploiement.

Autres conseils

Je créé un projet d'installation de chaînes de connexion ensemble et moi qui suit qui fonctionne parfaitement pour moi.

Créer un fichier installer.cs pour la configuration. using System;

using System.Data.SqlClient;
using System.Xml;
using System.Configuration;
using System.Reflection;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Collections;
using System.Configuration.Install;


namespace YOURNAMESPACE
{

    [RunInstaller(true)]
    public partial class installer : System.Configuration.Install.Installer
    {

        public installer()
        {
            InitializeComponent();
        }
        public override void Install(System.Collections.IDictionary stateSaver)
        {
            base.Install(stateSaver);

        }

        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);

            try
            {

                string DatabaseString1 = "FULL NAME OF CONNECTION STRING";
                ConnectionConfigure(DatabaseString1);


            }
            catch (Exception e)
            {
                base.Rollback(savedState);
            }
        }

        public override void Rollback(IDictionary savedState)
        {
            base.Rollback(savedState);
        }

        public override void Uninstall(IDictionary savedState)
        {
            base.Uninstall(savedState);
        }


        private void ConnectionConfigure(string DatabaseString)
        {
            string dataSource = "";
            dataSource = "Provider="+ Context.Parameters["InitialCatalog"]+ ";" + "Data Source=" + Context.Parameters["DataSource"];
            ExeConfigurationFileMap map = new ExeConfigurationFileMap();

            string configFile = string.Concat(Assembly.GetExecutingAssembly().Location, ".config");
            map.ExeConfigFilename = configFile;
            System.Configuration.Configuration config = System.Configuration.ConfigurationManager.
            OpenMappedExeConfiguration(map, System.Configuration.ConfigurationUserLevel.None);
            string connectionsection = config.ConnectionStrings.ConnectionStrings
            [DatabaseString].ConnectionString;


            ConnectionStringSettings connectionstring = null;
            if (connectionsection != null)
            {
                config.ConnectionStrings.ConnectionStrings.Remove(DatabaseString);

            }

            connectionstring = new ConnectionStringSettings(DatabaseString, dataSource);
            config.ConnectionStrings.ConnectionStrings.Add(connectionstring);

            config.Save(ConfigurationSaveMode.Modified, true);
            ConfigurationManager.RefreshSection("connectionStrings");

        }


    }
}

Ajoutez sortie de projet à votre projet d'installation puis commencer à configurer ce projet d'installation.

projet d'installation de clic droit

Ajouter des zones de texte et de créer l'interface utilisateur

Définir des actions personnalisées

Créer des actions de sortie du projet

propriétés d'action personnalisés

Voilà comment je mine de configuration (j'ai joint des captures d'écran pour expliquer mon processus mais en bref. Créer un projet d'installation et installer.cs fichier. Ajoutez sortie projet projet d'installation, ajouter une interface utilisateur afin que l'utilisateur peut entrer une connexion chaîne et ou fournisseur pour la chaîne de connexion, ajouter des actions personnalisées afin que les entrées peuvent être lues par le fichier installer.cs puis félicitations qu'il devrait changer la chaîne de connexion. Espérons que cela aide.

Je l'ai fait plusieurs fois, et fondamentalement j'installer simplement les deux fichiers avec des noms différents. L'application peut demander à l'utilisateur quel fichier à utiliser et changer quand ils le veulent parce que de nombreux utilisateurs ne savent pas assez sur l'application de faire ce choix lors de l'installation.

Vous obtenez des réponses intéressantes aux questions de configuration comme cela parce que beaucoup de gens veulent configurer l'application lors de l'installation. Pourquoi ne pas simplement laisser le programme d'installation installe les fichiers et ont l'application faire sa propre configuration?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top