【问题标题】:Renaming config files with Visual Studio setup project使用 Visual Studio 安装项目重命名配置文件
【发布时间】:2010-09-30 13:43:12
【问题描述】:

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

安装项目是否可行/可能?

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

DEV connectionStrings.config
PROD connectionStrings.config

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

connectionStrings.config

考虑到这是一个 VS 设置项目,我觉得我要求的太多了,我会得到一个有趣的回应,就像大多数设置项目问题一样 :)

【问题讨论】:

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


    【解决方案1】:

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

    为安装程序创建一个 installer.cs 文件。 使用系统;

    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 以便用户可以输入连接string 和/或连接字符串的提供者,添加自定义操作,以便 installer.cs 文件可以读取输入,然后恭喜它应该更改连接字符串。 希望这会有所帮助。

    【讨论】:

    • 这就是我的设置方式,因此从阅读您想要的内容来看,这是可能的,但可能需要大量设置:) 祝你一切顺利!我希望我的设置项目有所帮助。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      我已经这样做了很多次,基本上我只是安装了两个不同名称的文件。应用程序可以询问用户要使用哪个文件,并随时更改它,因为许多用户对应用程序的了解不够,无法在安装时做出此选择。

      对于此类设置问题,您会得到有趣的答案,因为许多人希望在安装期间配置应用程序。为什么不让安装程序安装文件并让应用程序自己进行配置?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-09
        相关资源
        最近更新 更多