我的应用程序有一些配置文件,每个配置文件特定于它所部署的机器(开发,生产等)我想将它们添加到安装项目中,使用单选按钮选择一个然后有脚本(或自定义操作?)将所选文件重命名为connectionStrings.config,settings.config等。
这对于安装项目是否可行/可行?
为了给你一个想法,我的配置可能如下:
DEV connectionStrings.config
PROD connectionStrings.config
用户在安装程序radiobutton UI中选择DEV或PROD后,我希望将所选配置重命名为
connectionStrings.config
考虑到它是一个VS设置项目,我有一种感觉,我要求的方式太多了,我会得到一个有趣的回应,因为大多数设置项目的问题:)
答案 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");
}
}
}
将项目输出添加到您的安装项目,然后开始设置此安装项目。
Add text boxes and create the UI
这就是我设置我的方法(我附上截图以帮助解释我的过程但简而言之。创建安装项目和installer.cs文件。将项目输出添加到安装项目,添加UI以便用户可以输入连接连接字符串的字符串和/或提供程序,添加自定义操作,以便可以通过installer.cs文件读取输入,然后祝贺它应该更改连接字符串。 希望这会有所帮助。
答案 2 :(得分:0)
我已经多次这样做了,基本上我只是用不同的名字安装这两个文件。应用程序可以询问用户使用哪个文件,并随时更改它,因为许多用户对安装时做出此选择的应用程序知之甚少。
您可以获得有关此类设置问题的有趣答案,因为许多人希望在安装过程中配置应用程序。为什么不让安装程序安装文件并让应用程序自己配置?