使用Visual Studio安装项目重命名配置文件

时间:2010-09-30 13:43:13

标签: visual-studio installer setup-project custom-action

我的应用程序有一些配置文件,每个配置文件特定于它所部署的机器(开发,生产等)我想将它们添加到安装项目中,使用单选按钮选择一个然后有脚本(或自定义操作?)将所选文件重命名为connectionStrings.config,settings.config等。

这对于安装项目是否可行/可行?

为了给你一个想法,我的配置可能如下:

DEV connectionStrings.config
PROD connectionStrings.config

用户在安装程序radiobutton UI中选择DEV或PROD后,我希望将所选配置重命名为

connectionStrings.config

考虑到它是一个VS设置项目,我有一种感觉,我要求的方式太多了,我会得到一个有趣的回应,因为大多数设置项目的问题:)

3 个答案:

答案 0 :(得分:0)

我得出的结论是,由于VS严重缺乏安装项目配置选项,这是不可能的。相反,我在设置过程中添加了一个单选按钮控件,并为选项分配了变量名称。在文件系统中,我添加了所有配置文件,然后为每个配置文件设置条件。他们引用我的单选按钮选项的值,以便在部署期间进行复制。

答案 1 :(得分:0)

我创建了一个设置连接字符串的设置项目,我使用了以下对我来说非常适合的工作。

为安装程序创建installer.cs文件。 使用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");

        }


    }
}

将项目输出添加到您的安装项目,然后开始设置此安装项目。

Right click setup project

Add text boxes and create the UI

Set custom actions

Create project output actions

Custom action properties

这就是我设置我的方法(我附上截图以帮助解释我的过程但简而言之。创建安装项目和installer.cs文件。将项目输出添加到安装项目,添加UI以便用户可以输入连接连接字符串的字符串和/或提供程序,添加自定义操作,以便可以通过installer.cs文件读取输入,然后祝贺它应该更改连接字符串。 希望这会有所帮助。

答案 2 :(得分:0)

我已经多次这样做了,基本上我只是用不同的名字安装这两个文件。应用程序可以询问用户使用哪个文件,并随时更改它,因为许多用户对安装时做出此选择的应用程序知之甚少。

您可以获得有关此类设置问题的有趣答案,因为许多人希望在安装过程中配置应用程序。为什么不让安装程序安装文件并让应用程序自己配置?