由于公司变动,以前都是有ini作为配置文件的,这次要改为web的config格式作为配置文件-->xxx.config格式
unity 版本位5.6f,
查询了很多的资料,大部分都要用Unity.Configuration,但是不知为啥我的unity无法支持其dll文件,因为.net格式太低,后来我更改了版本,换成了2018.3.5,他可以支持.net4x
后来才发现并没有啥用,而且由于配置只需要读取最为简单的 <add key="MySql" value=“ ”/>这其中一个值即可。
因此改为了寻常读取xml的方法。
web.config如下
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="MySql" value="……"/> <add key="OfflineMySql" value="……"/> </appSettings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
unity使用其自带的System.Xml.Linq的dll方法,代码如下
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Xml.Linq; using System.Xml; using System.IO; public class LoadConfig : MonoBehaviour { public static string serverSql = null; public static string offlineSql = null; //在所有代码执行前执行 [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] static void OnConfigLoaded() { //config存放路径 string configPath = "F:/work/web.config"; XmlDocument configInfo = new XmlDocument(); if (configPath != null) { //一层层的拨开xml configInfo.Load(configPath); XmlNode configuration = configInfo.SelectSingleNode("configuration"); XmlNode appSettings = configuration.SelectSingleNode("appSettings"); XmlNodeList infoNodeList = appSettings.ChildNodes; //用foreach查找add key的值 foreach (XmlElement xe in infoNodeList) { if (xe.Attributes["key"].Value == "MySql") { // 获取其相应的value值 serverSql = xe.Attributes["value"].Value; } if (xe.Attributes["key"].Value == "OfflineMySql") { // 获取其相应的value值 offlineSql = xe.Attributes["value"].Value; } } if (serverSql == null || offlineSql == null) { if (serverSql == null) { Debug.Log("缺少服务器数据库配置信息,请查看配置文件"); } if (offlineSql == null) { Debug.Log("缺少本地数据库配置信息,请查看配置文件"); } } } else Debug.Log("未找到配置文件"); } }
获取出来之后,由于是sql配置信息,所以需要解析字符串,sql配置信息示例:
"OfflineMySql" value="Server=127.0.0.1;Port=3306;Database=sqlcs;Uid=root;Pwd=111111;"/>
void Awake() { //调用解析 ConfigPars(LoadConfig.serverSql, serverSqlConnetList); ConfigPars(LoadConfig.offlineSql, offlinSqlConnetList); } /// <summary> /// 解析config的数据库信息字符串 /// </summary> /// <param name="sql"></param> /// <param name="list"></param> public void ConfigPars(string sql, List<string> list) { if (list != null) { list.Clear(); } var result = sql.Split(';').Select(s => s.Split('=').LastOrDefault()); result.ToList().ForEach(s => list.Add(s)); }