5

このクラスを使用して構成ファイルに書き込みます。コードがビルドされてアプリが起動しますが、app.configを確認するたびに、内部に何も書き込まれていません。

何が問題なのですか?

コードは次のとおりです。

public class ConfigSettings
    {
        private ConfigSettings() { }

        public static string ReadSetting(string key)
        {
            return ConfigurationManager.AppSettings[key];
        }

        public static void WriteSetting(string key, string value)
        {
            // load config document for current assembly
            XmlDocument doc = loadConfigDocument();

            // retrieve appSettings node
            XmlNode node = doc.SelectSingleNode("//appSettings");

            if (node == null)
                throw new InvalidOperationException("appSettings section not found in config file.");

            try
            {
                // select the 'add' element that contains the key
                XmlElement elem = (XmlElement)node.SelectSingleNode(string.Format("//add[@key='{0}']", key));

                if (elem != null)
                {
                    // add value for key
                    elem.SetAttribute("value", value);
                }
                else
                {
                    // key was not found so create the 'add' element
                    // and set it's key/value attributes
                    elem = doc.CreateElement("add");
                    elem.SetAttribute("key", key);
                    elem.SetAttribute("value", value);
                    node.AppendChild(elem);
                }
                doc.Save(getConfigFilePath());
            }
            catch
            {
                throw;
            }
        }

        public static void RemoveSetting(string key)
        {
            // load config document for current assembly
            XmlDocument doc = loadConfigDocument();

            // retrieve appSettings node
            XmlNode node = doc.SelectSingleNode("//appSettings");

            try
            {
                if (node == null)
                    throw new InvalidOperationException("appSettings section not found in config file.");
                else
                {
                    // remove 'add' element with coresponding key
                    node.RemoveChild(node.SelectSingleNode(string.Format("//add[@key='{0}']", key)));
                    doc.Save(getConfigFilePath());
                }
            }
            catch (NullReferenceException e)
            {
                throw new Exception(string.Format("The key {0} does not exist.", key), e);
            }
        }

        private static XmlDocument loadConfigDocument()
        {
            XmlDocument doc = null;
            try
            {
                doc = new XmlDocument();
                doc.Load(getConfigFilePath());
                return doc;
            }
            catch (System.IO.FileNotFoundException e)
            {
                throw new Exception("No configuration file found.", e);
            }
        }

        private static string getConfigFilePath()
        {
            return AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString();
        }
    }

その後、これを使用してファイルに書き込みます。

ConfigSettings.WriteSetting("check", "true");
4

2 に答える 2

5

System.Configuration.ConfigurationSectionから派生して、非常に単純にすることができます。

public class MyConfigurationSection : System.Configuration.ConfigurationSection
{
    [ConfigurationProperty("myProperty")]
    public string MyProperty 
    {
        get { return (string)this["myProperty"]; }
        set { this["myProperty"] = value; }
    }
}

次に、configSectionをapp/web.configに追加します。

<configuration>
    <configSections>
        <section name="myConfiguration" type="MyConfigurationSection, MyAssembly" />
    </configSections>

    <myConfiguration myProperty="someValue" />
</configuration>

インスタンスは次のようにどこでも取得できます。

ConfigurationManager.GetSection("myConfiguration") as MyConfigurationSection
于 2012-05-23T11:17:03.610 に答える
4

app.configの代わりにYourExeName.configファイルを確認してください

于 2012-05-23T11:10:18.390 に答える