以编程方式将密钥添加到 App.config C#

问题描述 投票:0回答:3

我正在尝试以编程方式添加密钥并将其保存到我的 App.config 文件中。我的代码如下,我见过很多这样的不同示例,但我的代码不起作用。我正在尝试添加一个全新的密钥,而不是修改现有的密钥。这是一个控制台应用程序,我确实添加了对 System.configuration 的引用。

程序.cs

using System;
using System.Linq;
using System.Text;
using System.Configuration;

namespace AddValuesToConfig
{
    class Program
    {
        static void Main(string[] args)
        {

            System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

            config.AppSettings.Settings.Add("key1", "value");

            // Save the changes in App.config file.

            config.Save(ConfigurationSaveMode.Modified);

        }
    }
}

应用程序配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>

    </appSettings>
</configuration>
c# .net app-config
3个回答
2
投票

您很可能在 Visual Studio 的调试器下运行此代码。事实是,当您执行此操作时,Visual Studio 实际上运行的不是 YourApp.exe,而是 YourApp.vshost.exe 文件。这意味着您要将密钥添加到 YourApp.vshost.exe.config 文件而不是 YourApp.exe.config。尝试在没有调试器的情况下运行,它应该可以工作。

编辑以回答下面的评论。主题发起者声称 VS 在调试时甚至不写入 .vshost.exe.config,我认为这是真的。然而,很少有调查表明它确实写入 .vshost.config.exe 文件,但是当您停止调试时,它会用 .exe.config 覆盖 .vshost.exe.config 的内容。因此,在调试会话结束后,您可能会认为它根本没有写入任何内容。但是,如果您在 config.Save() 语句之后放置断点并打开 .vshost.exe.config 文件 - 您将看到那里的更改。


1
投票

用于写入:

 public static bool SetAppSettings<TType>(string key, TType value)
    {
        try
        {
            if (string.IsNullOrEmpty(key))
                return false;

            Configuration appConfig = ConfigurationManager.OpenExeConfiguration(GetCurrentApplicationPath());
            AppSettingsSection appSettings = (AppSettingsSection)appConfig.GetSection("appSettings");
            if (appSettings.Settings[key] == null)
                appSettings.Settings.Add(key, value.ToString());
            else
                appSettings.Settings[key].Value = value.ToString();
            appConfig.Save(ConfigurationSaveMode.Modified);
            ConfigurationManager.RefreshSection("appSettings");
            return true;
        }
        catch
        {
            return false;
        }
    }

供阅读:

public static TType GetAppSettings<TType>(string key, TType defaultValue = default(TType))
    {
        try
        {
            if (string.IsNullOrEmpty(key))
                return defaultValue;
            AppSettingsReader appSettings = new AppSettingsReader();
            return (TType)appSettings.GetValue(key, typeof(TType));
        }
        catch
        {
            return defaultValue;
        }
    }

0
投票

对我有用:

ConfigurationManager.AppSettings.Set(item.Key, item.Value);
© www.soinside.com 2019 - 2024. All rights reserved.