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

问题描述:

我的应用程序有几个配置文件,每个配置文件都是特定于要部署到的机器(dev,production等)。我想将它们添加到安装项目中,使用单选按钮来选择一个,然后有一个脚本(或者可能是自定义操作?)将所选文件重命名为connectionStrings.config,settings.config等。使用Visual Studio安装项目重命名配置文件

这对设置项目是否可行/可行?

为了给你一个想法,我CONFIGS可能是这样的:

DEV connectionStrings.config 
PROD connectionStrings.config 

用户选择DEV或安装单选按钮UI PROD后,我想选择的配置将被重新命名为

connectionStrings.config 

考虑到这是一个VS安装项目,我有一种感觉,我所要求的方式太多了,因为大部分安装项目的问题做:)

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

我创建了一个安装项目来设置连接字符串,并且我使用了以下完全适合我的工程。

为安装程序创建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

这就是我怎么设置我的(我附上截图,以帮助解释我的过程,但在短期创建设置项目和d installer.cs文件。将项目输出添加到安装项目中,添加一个UI以便用户可以输入连接字符串和/或连接字符串的提供程序,添加自定义操作以便可以通过installer.cs文件读取输入,然后恭喜它应该更改连接串。 希望这有助于。

+0

这就是我的设置,所以从阅读你想要你做的事情是可能的,但可能会需要很多设置:)我祝你最好!我希望我的设置项目有所帮助。 – 2016-07-12 11:58:08

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

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