Thêm các giá trị vào app.config và truy xuất chúng


75

Tôi cần chèn các cặp giá trị khóa trong app.Config như sau:

<configuration>
 <appSettings>
    <add key="Setting1" value="Value1" />
    <add key="Setting2" value="Value2" />
 </appSettings>
</configuration>

Khi tôi tìm kiếm trên google, tôi nhận được đoạn mã sau

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Add an Application Setting.

config.AppSettings.Settings.Add("ModificationDate",
               DateTime.Now.ToLongTimeString() + " ");

// Save the changes in App.config file.

config.Save(ConfigurationSaveMode.Modified);

Mã trên không hoạt động vì không tìm thấy ConfigurationManager trong không gian tên System.Configuration mà tôi đang sử dụng .NET 2.0. Làm cách nào để thêm các cặp khóa-giá trị vào app.Config theo chương trình và truy xuất chúng?


6
Chỉ cần một lưu ý cho bất kỳ ai đọc phần này rằng config.Save (ConfigurationSaveMode.Modified) chỉ lưu giá trị nếu khóa được xác định trước trong tệp app.config. Để thực sự tạo một cái mới, bạn chỉ cần sử dụng config.Save () không có tham số.
— ryanulit

Câu trả lời:


53

Bạn có thiếu tham chiếu đến System.Configuration.dll không? ConfigurationManagerlớp nằm ở đó.

CHỈNH SỬA: Không System.Configurationgian tên có các lớp trong mscorlib.dll, system.dll và trong system.configuration.dll. Dự án của bạn luôn bao gồm các tham chiếu mscorlib.dll và system.dll, nhưng system.configuration.dll phải được thêm vào hầu hết các loại dự án, vì nó không có ở đó theo mặc định ...


2
Điều đó làm cho tôi đôi khi! Tôi tiếp tục nghĩ rằng tất cả những gì tôi cần là sử dụng :(
— crashmstr

12

Những công việc này:

public static void AddValue(string key, string value)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    config.AppSettings.Settings.Add(key, value);
    config.Save(ConfigurationSaveMode.Minimal);
}

3
nếu bạn muốn có thể truy cập giá trị này mà bạn vừa thêm vào mã sau đó mà không cần khởi động lại ứng dụng của mình, bạn cần gọi ConfigurationManager.RefreshSection("appSettings");sau đó.
— tuyên truyền

Bạn có thể sử dụng Assembly.GetExecutingAssembly().Locationthay vì Application.ExecutablePathnếu bạn chạy nó từ trong Ứng dụng bảng điều khiển . Bạn cũng có thể xem câu trả lời của Suraj .
— AlexMelw

9

Hãy thử thêm Tham chiếu vào System.Configuration, bạn nhận được một số không gian tên cấu hình bằng cách tham chiếu không gian tên Hệ thống, thêm tham chiếu vào System.Configuration sẽ cho phép bạn truy cập ConfigurationManager.


5

Tôi mong cái này sẽ thành công:

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

config.AppSettings.Settings["Yourkey"].Value = "YourValue";
config.Save(ConfigurationSaveMode.Modified);

3

Để lấy dữ liệu từ App.config

Hãy nhớ rằng bạn phải:

  1. Đã thêm vào Tài liệu tham khảo -> System.Configuration
  2. và cũng đã thêm câu lệnh này bằng cách sử dụng -> using System.Configuration;

Chỉ đơn giản là làm điều này

string value1 = ConfigurationManager.AppSettings["Value1"];

Ngoài ra, bạn có thể đạt được điều này trong một dòng, nếu bạn không muốn thêm using System.Configuration;một cách rõ ràng.

string value1 = System.Configuration.ConfigurationManager.AppSettings["Value1"]

0

xin lỗi vì câu trả lời muộn nhưng có thể mã của tôi có thể giúp bạn.

Tôi đã đặt 3 nút trên bề mặt winform. button1 & 2 sẽ đặt giá trị khác nhau và button3 sẽ truy xuất giá trị hiện tại. vì vậy khi chạy mã của tôi trước tiên hãy thêm tham chiếu System.configuration

và nhấp vào nút đầu tiên và sau đó nhấp vào nút thứ 3 để xem giá trị nào đã được đặt. lần sau, nhấp lại vào nút thứ hai và thứ ba để xem lại giá trị nào đã được đặt sau khi thay đổi.

vì vậy đây là mã.

using System.Configuration;

 private void button1_Click(object sender, EventArgs e)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    config.AppSettings.Settings.Remove("DBServerName");
    config.AppSettings.Settings.Add("DBServerName", "FirstAddedValue1");
    config.Save(ConfigurationSaveMode.Modified);
}

private void button2_Click(object sender, EventArgs e)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
    config.AppSettings.Settings.Remove("DBServerName");
    config.AppSettings.Settings.Add("DBServerName", "SecondAddedValue1");
    config.Save(ConfigurationSaveMode.Modified);
}

private void button3_Click(object sender, EventArgs e)
{
    Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
          MessageBox.Show(config.AppSettings.Settings["DBServerName"].Value);
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.