我为我的安装人员所做的是使用 App.Config 中的“文件”属性。appSettings 块采用“文件”属性,如下所示:
<appSettings file="user.config">
<add key="foo" value="some value unchanged by setup"/>
</appSettings>
“文件”属性有点像 CSS,因为最具体的设置胜出。如果您在 user.config 和 App.config 中定义了“foo”,则使用 user.config 中的值。
然后,我有一个配置生成器,它使用字典中的值将第二个 appSettings 块写入 user.config(或您想要调用的任何内容)。
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace Utils
{
public class ConfigGenerator
{
public static void WriteExternalAppConfig(string configFilePath, IDictionary<string, string> userConfiguration)
{
using (XmlTextWriter xw = new XmlTextWriter(configFilePath, Encoding.UTF8))
{
xw.Formatting = Formatting.Indented;
xw.Indentation = 4;
xw.WriteStartDocument();
xw.WriteStartElement("appSettings");
foreach (KeyValuePair<string, string> pair in userConfiguration)
{
xw.WriteStartElement("add");
xw.WriteAttributeString("key", pair.Key);
xw.WriteAttributeString("value", pair.Value);
xw.WriteEndElement();
}
xw.WriteEndElement();
xw.WriteEndDocument();
}
}
}
}
在您的安装程序中,只需在您的安装方法中添加如下内容:
string configFilePath = string.Format("{0}{1}User.config", targetDir, Path.DirectorySeparatorChar);
IDictionary<string, string> userConfiguration = new Dictionary<string, string>();
userConfiguration["Server"] = Context.Parameters["Server"];
userConfiguration["Port"] = Context.Parameters["Port"];
ConfigGenerator.WriteExternalAppConfig(configFilePath, userConfiguration);
我们将它用于我们的测试、训练和生产服务器,所以我们所要做的就是在安装过程中指定机器名称和密码,一切都为我们处理好了。它曾经是一个 3 小时的过程,包括通过多个配置文件来设置密码。现在它几乎完全自动化了。
希望这可以帮助。