2010-09-30 41 views
1

Mes applications ont une poignée de fichiers de configuration, chacun d'eux étant spécifique à la machine sur laquelle elle est déployée (dev, production, etc.) Je veux les ajouter au projet d'installation, utilisez des boutons radio pour en sélectionner un, puis un script (ou peut-être une action personnalisée?) renommez les fichiers sélectionnés en connectionStrings.config, settings.config, etc.Renommage des fichiers de configuration avec le projet d'installation de Visual Studio

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

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

DEV connectionStrings.config 
PROD connectionStrings.config 

Après 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, j'ai le sentiment 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 :)

Répondre

0

I J'en suis arrivé à la conclusion que cela est impossible en raison de l'absence sévère de VS sur les options de configuration du projet d'installation. Au lieu de cela, j'ai ajouté un contrôle de bouton radio au cours du processus d'installation et affecté les choix d'un nom de variable. Dans le système de fichiers, j'ai ajouté tous mes fichiers de configuration et ensuite définir les conditions de chacun. Ils ont référencé des valeurs à mes choix de boutons radio afin de les copier pendant le déploiement.

0

J'ai créé un projet d'installation pour définir des chaînes de connexion et j'ai utilisé ce qui suit qui fonctionne parfaitement pour moi.

Créez un fichier installer.cs pour l'installation. en utilisant le système; Ajoutez la sortie du projet à votre projet de configuration, puis commencez la configuration de ce projet de configuration.

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"); 

     } 


    } 
} 

Right click setup project

Add text boxes and create the UI

Set custom actions

Create project output actions

Custom action properties

Voilà comment je mine de configuration (j'ai joint des captures d'écran pour aider à expliquer mon processus mais en bref. Créer projet d'installation un d fichier installer.cs. Ajouter la sortie du projet au projet d'installation, ajouter une interface utilisateur pour que l'utilisateur saisisse une chaîne de connexion ou un fournisseur pour la chaîne de connexion, ajoute des actions personnalisées pour que les entrées puissent être lues par le fichier installer.cs et félicitations chaîne. J'espère que cela aide.

+0

C'est comme ça que le mien est installé, donc de lire ce que vous vouliez faire, c'est possible, mais ça prendrait probablement beaucoup de réglages :) Je vous souhaite le meilleur! et j'espère que mon projet d'installation aide. –

0

Je l'ai fait plusieurs fois, et fondamentalement, je viens d'installer les deux fichiers avec des noms différents. L'application peut demander à l'utilisateur quel fichier utiliser et la modifier à tout moment, car de nombreux utilisateurs ne connaissent pas suffisamment l'application pour effectuer ce choix lors de l'installation.

Vous obtenez des réponses intéressantes à des questions comme celles-ci car beaucoup de gens veulent configurer l'application pendant l'installation. Pourquoi ne pas laisser l'installation installer les fichiers et faire en sorte que l'application fasse sa propre configuration?