C# 關於config文件中的usersettings


在調整app.config的時候遇到了一點問題,把這個問題記錄下來,可能我只是沒有找到解決方案,問題本身也許並不復雜。

  1. 在VS中通過Properties中的Settings.settings來設置作用范圍為用戶的配置項,假設此時的配置名稱為Port,配置的內容為A
    此時在程序中通過Properties.Settings.Default.Port來獲取該配置項,獲取到的值為A

  2. 生成解決方案之后,在.exe.config文件中修改該Port配置,將其修改成B
    程序中同樣使用Properties.Settings.Default.Port來獲取該值,此時獲取到的是B

  3. 程序中使用Properties.Settings.Default.Properties["Port"].DefaultValue來獲取Port配置,此時獲取到的值 是A而不是B

  4. 程序中修改Properties.Settings.Default.Port 為C,並使用Properties.Settings.Default.Save()進行保存,再通過Properties.Settings.Default.Port來獲取該配置,此時獲取到的值為C。
    注意,這樣的修改不會直接去改exe.config文件,而是會在用戶目錄下的可能是Appdata類似的目錄下main的相應項目文件下下生成一個user.config文件,用戶的修改在這個config文件中。

  5. 現在遇到的問題是如何在做了上面的1, 2, 3, 4之后,能夠獲取到值為B的配置,即直接讀取config文件中的配置(有該需求的原因是用戶可能直接改過這個config文件,而不是通過程序提供的某種方式修改的),而不是使用程序一開始配置的settings,也不使用用戶在程序中修改后保存的settings。

順便記錄一下讀取配置類型為StringCollection的默認userSettings配置的方法:
使用Xml解析:

using System.Xml;

var prop = Properties.Settings.Default.Properties["Port"].DefaultValue as string;
var doc = new XmlDocument();
doc.LoadXml(prop);
XmlNodeList nodes = doc.SelectSingleNode("ArrayOfString").ChildNodes;

var ts = new List<String>();
foreach (XmlNode e in nodes)
    s.Add(e.InnerText);

從app.config文件中看,這個配置項大概是這樣的:

<userSettings>
        <XXXX.Properties.Settings>
            <setting name="Port" serializeAs="Xml">
                <value>
                    <ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
                        <string>1</string>
                        <string>2</string>
                        <string>3</string>
                        <string>4</string>
                        <string>5</string>
                        <string>6</string>
                        <string>7</string>
                        <string>8</string>
                        <string>9</string>
                        <string>10</string>
                        <string>11</string>
                    </ArrayOfString>
                </value>
            </setting>
        </XXXX.Properties.Settings>
    </userSettings>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM