配置文件概述:
應用程序配置文件是標準的 XML 文件,XML 標記和屬性是區分大小寫的。它是可以按需要更改的,開發人員可以使用配置文件來更改設置,而不必重編譯應用程序。配置文件的根節點是configuration。我們經常訪問的是appSettings,它是由.Net預定義的配置節。我們經常使用的配置文件的架構是客訴下面的形式。先大概有個印象,通過后面的實例會有一個比較清楚的認識。下面的“配置節”可以理解為進行配置一個XML的節點。
對于一個config文件:
1
2
3
4
5
6
7
8
9
|
<? xml version = "1.0" encoding = "utf-8" ?> < configuration > < appSettings > < add key = "ServerIP" value = "127.0.0.1" ></ add > < add key = "DataBase" value = "WarehouseDB" ></ add > < add key = "user" value = "sa" ></ add > < add key = "password" value = "sa" ></ add > </ appSettings > </ configuration > |
對config配置文件的讀寫類:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Configuration; using System.ServiceModel; using System.ServiceModel.Configuration; namespace NetUtilityLib { public static class ConfigHelper { //依據連接串名字connectionName返回數據連接字符串 public static string GetConnectionStringsConfig( string connectionName) { //指定config文件讀取 string file = System.Windows.Forms.Application.ExecutablePath; System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(file); string connectionString = config.ConnectionStrings.ConnectionStrings[connectionName].ConnectionString.ToString(); return connectionString; } ///<summary> ///更新連接字符串 ///</summary> ///<param name="newName">連接字符串名稱</param> ///<param name="newConString">連接字符串內容</param> ///<param name="newProviderName">數據提供程序名稱</param> public static void UpdateConnectionStringsConfig( string newName, string newConString, string newProviderName) { //指定config文件讀取 string file = System.Windows.Forms.Application.ExecutablePath; Configuration config = ConfigurationManager.OpenExeConfiguration(file); bool exist = false ; //記錄該連接串是否已經存在 //如果要更改的連接串已經存在 if (config.ConnectionStrings.ConnectionStrings[newName] != null ) { exist = true ; } // 如果連接串已存在,首先刪除它 if (exist) { config.ConnectionStrings.ConnectionStrings.Remove(newName); } //新建一個連接字符串實例 ConnectionStringSettings mySettings = new ConnectionStringSettings(newName, newConString, newProviderName); // 將新的連接串添加到配置文件中. config.ConnectionStrings.ConnectionStrings.Add(mySettings); // 保存對配置文件所作的更改 config.Save(ConfigurationSaveMode.Modified); // 強制重新載入配置文件的ConnectionStrings配置節 ConfigurationManager.RefreshSection( "ConnectionStrings" ); } ///<summary> ///返回*.exe.config文件中appSettings配置節的value項 ///</summary> ///<param name="strKey"></param> ///<returns></returns> public static string GetAppConfig( string strKey) { string file = System.Windows.Forms.Application.ExecutablePath; Configuration config = ConfigurationManager.OpenExeConfiguration(file); foreach ( string key in config.AppSettings.Settings.AllKeys) { if (key == strKey) { return config.AppSettings.Settings[strKey].Value.ToString(); } } return null ; } ///<summary> ///在*.exe.config文件中appSettings配置節增加一對鍵值對 ///</summary> ///<param name="newKey"></param> ///<param name="newValue"></param> public static void UpdateAppConfig( string newKey, string newValue) { string file = System.Windows.Forms.Application.ExecutablePath; Configuration config = ConfigurationManager.OpenExeConfiguration(file); bool exist = false ; foreach ( string key in config.AppSettings.Settings.AllKeys) { if (key == newKey) { exist = true ; } } if (exist) { config.AppSettings.Settings.Remove(newKey); } config.AppSettings.Settings.Add(newKey, newValue); config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection( "appSettings" ); } // 修改system.serviceModel下所有服務終結點的IP地址 public static void UpdateServiceModelConfig( string configPath, string serverIP) { Configuration config = ConfigurationManager.OpenExeConfiguration(configPath); ConfigurationSectionGroup sec = config.SectionGroups[ "system.serviceModel" ]; ServiceModelSectionGroup serviceModelSectionGroup = sec as ServiceModelSectionGroup; ClientSection clientSection = serviceModelSectionGroup.Client; foreach (ChannelEndpointElement item in clientSection.Endpoints) { string pattern = @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" ; string address = item.Address.ToString(); string replacement = string .Format( "{0}" , serverIP); address = Regex.Replace(address, pattern, replacement); item.Address = new Uri(address); } config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection( "system.serviceModel" ); } // 修改applicationSettings中App.Properties.Settings中服務的IP地址 public static void UpdateConfig( string configPath, string serverIP) { Configuration config = ConfigurationManager.OpenExeConfiguration(configPath); ConfigurationSectionGroup sec = config.SectionGroups[ "applicationSettings" ]; ConfigurationSection configSection = sec.Sections[ "DataService.Properties.Settings" ]; ClientSettingsSection clientSettingsSection = configSection as ClientSettingsSection; if (clientSettingsSection != null ) { SettingElement element1 = clientSettingsSection.Settings.Get( "DataService_SystemManagerWS_SystemManagerWS" ); if (element1 != null ) { clientSettingsSection.Settings.Remove(element1); string oldValue = element1.Value.ValueXml.InnerXml; element1.Value.ValueXml.InnerXml = GetNewIP(oldValue, serverIP); clientSettingsSection.Settings.Add(element1); } SettingElement element2 = clientSettingsSection.Settings.Get( "DataService_EquipManagerWS_EquipManagerWS" ); if (element2 != null ) { clientSettingsSection.Settings.Remove(element2); string oldValue = element2.Value.ValueXml.InnerXml; element2.Value.ValueXml.InnerXml = GetNewIP(oldValue, serverIP); clientSettingsSection.Settings.Add(element2); } } config.Save(ConfigurationSaveMode.Modified); ConfigurationManager.RefreshSection( "applicationSettings" ); } private static string GetNewIP( string oldValue, string serverIP) { string pattern = @"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b" ; string replacement = string .Format( "{0}" , serverIP); string newvalue = Regex.Replace(oldValue, pattern, replacement); return newvalue; } } } |
測試代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
class Program { static void Main( string [] args) { try { //string file = System.Windows.Forms.Application.ExecutablePath + ".config"; //string file1 = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile; string serverIP = ConfigHelper.GetAppConfig( "ServerIP" ); string db = ConfigHelper.GetAppConfig( "DataBase" ); string user = ConfigHelper.GetAppConfig( "user" ); string password = ConfigHelper.GetAppConfig( "password" ); Console.WriteLine(serverIP); Console.WriteLine(db); Console.WriteLine(user); Console.WriteLine(password); ConfigHelper.UpdateAppConfig( "ServerIP" , "192.168.1.11" ); string newIP = ConfigHelper.GetAppConfig( "ServerIP" ); Console.WriteLine(newIP); Console.ReadKey(); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/luxiaoxun/p/3599341.html