Cách đơn giản nhất để có tệp cấu hình trong ứng dụng Windows Forms C #


88

Tôi thực sự mới sử dụng .NET và tôi vẫn chưa hiểu về cách hoạt động của các tệp cấu hình.

Mỗi khi tôi tìm kiếm trên Google về nó, tôi nhận được kết quả về web.config, nhưng tôi đang viết một ứng dụng Windows Forms.

Tôi đã phát hiện ra rằng mình cần sử dụng không gian tên System.Configuration, nhưng tài liệu này không giúp được gì.

Làm cách nào để xác định rằng tệp cấu hình của tôi là XYZ.xml? Hay nó có tên "mặc định" cho tệp cấu hình? Tôi vẫn chưa hiểu.

Ngoài ra, làm cách nào để xác định một phần mới? Tôi có thực sự cần tạo một lớp kế thừa từ ConfigurationSection không?

Tôi chỉ muốn có một tệp cấu hình với một số giá trị như sau:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

Có một cách đơn giản để làm điều đó? Bạn có thể giải thích một cách đơn giản cách đọc và ghi từ / vào một tệp cấu hình đơn giản không?


1
Phiên bản .NET của bạn là gì? Đối với phiên bản 2.0 trở lên, có một cách rất dễ thương gọi là Cài đặt.
Thomas

1
@Seven đó là một lỗi đánh máy nhưng nó có thể có nghĩa là "Hãy giải thích với một ví dụ" :)
Fabio Gomes

Câu trả lời:


121

Bạn muốn sử dụng một App.Config.

Khi bạn thêm một mục mới vào một dự án, sẽ có một thứ gọi là tệp Cấu hình ứng dụng. Thêm điều đó.

Sau đó, bạn thêm khóa vào phần cấu hình / cài đặt ứng dụng

Giống:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Tiếp cận các thành viên bằng cách thực hiện

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Điều này hoạt động trong .NET 2 trở lên.


2
Trên thực tế, nó hoạt động trong tất cả các phiên bản .NET, từ v1.0 trở đi. Lớp mới trong .NET 2.0 là ConfigurationManager.
Mike Dimmick 22/09/08

4
Cá nhân tôi sử dụng tab "Cài đặt" trên "Thuộc tính ứng dụng" (chỉ dành cho Framework 2.0 trở đi) vì Visual Studio sẽ mã hóa các thuộc tính được gõ mạnh cho cài đặt của bạn. Chúng cũng có thể bao gồm cài đặt "Người dùng" được đọc / ghi tại thời điểm chạy.
Adrian Clark

@Mike vâng, tôi có cảm giác như vậy, nhưng tôi không chắc lắm. Tôi đã không làm việc nhiều với 1.
qui

26
Lưu ý ConfigurationSettingslà lỗi thời, sử dụng System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF

16
Cũng là một lưu ý, sử dụng System.Configuration.ConfigurationManagerdự án của bạn cần một tham chiếu đếnSystem.Configuration.dll
dmeglio

66

Làm rõ các câu trả lời trước ...

  1. Thêm tệp mới vào dự án của bạn ( ThêmMục mớiTệp cấu hình ứng dụng )

  2. Tệp cấu hình mới sẽ xuất hiện trong Solution Explorer dưới dạng App.Config .

  3. Thêm cài đặt của bạn vào tệp này bằng cách sử dụng phần sau làm mẫu

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
  4. Lấy chúng như thế này:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
  5. Khi được tạo, thư mục đầu ra của bạn sẽ chứa một tệp có tên <assemblyname> .exe.config. Đây sẽ là bản sao của tệp App.Config . Nhà phát triển không cần thực hiện thêm công việc nào để tạo tệp này.


1
Điều này rất hữu ích đối với tôi. Hai điểm khác: Khi thêm tệp mới vào dự án, Tệp Cấu hình Ứng dụng được tìm thấy khi tôi nhấp vào nút Chung ở phía bên trái của hộp thoại. Để sử dụng lớp ConfigurationManager trong mã của mình, tôi phải thêm DLL System.Configuration vào các tham chiếu của mình.
John Gilmer

28

Từ việc đọc nhanh các câu trả lời trước đó, chúng trông đúng, nhưng có vẻ như không ai đề cập đến cơ sở cấu hình mới trong Visual Studio 2008. Nó vẫn sử dụng app.config (được sao chép tại thời điểm biên dịch thành YourAppName.exe.config), nhưng có một tiện ích giao diện người dùng để đặt thuộc tính và chỉ định loại của chúng. Bấm đúp vào Settings.settings trong thư mục "Thuộc tính" của dự án của bạn.

Phần tốt nhất là việc truy cập thuộc tính này từ mã là typeafe - trình biên dịch sẽ mắc các lỗi rõ ràng như gõ nhầm tên thuộc tính. Ví dụ: một thuộc tính có tên MyConnectionString trong app.config sẽ được truy cập như:

string s = Properties.Settings.Default.MyConnectionString;

Điều này đã có trong VS2005.
Greg D

5
Tốt, nhưng nó (Thuộc tính dự án | Cài đặt) tạo ra mã phải được biên dịch. Nếu bạn muốn thay đổi cài đặt, bạn cần phát hành mã nhị phân mới cho khách hàng.
JohnL4

@ JohnL4 nếu các cài đặt này nằm trong phạm vi "người dùng" thì bạn có thể thay đổi nó theo chương trình, ví dụSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits

10

Bạn nên tạo một tệp App.config (rất giống với web.config ).

Bạn nên nhấp chuột phải vào dự án của mình, thêm mục mới và chọn "Tệp cấu hình ứng dụng" mới .

Đảm bảo rằng bạn thêm bằng cách sử dụng System.Configuration trong dự án của mình.

Sau đó, bạn có thể thêm các giá trị vào nó:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Chỉ cần lưu ý: Theo Microsoft , bạn nên sử dụng ConfigurationManager thay vì ConfigurationSettings (xem phần nhận xét):

"Lớp ConfigurationSettings chỉ cung cấp khả năng tương thích ngược. Đối với các ứng dụng mới, bạn nên sử dụng lớp ConfigurationManager hoặc lớp WebConfigurationManager để thay thế."


Rất hữu ích. Đã giải quyết vấn đề của tôi cho T.
JCMorris

Trong Visual Studio 2015: Nhấp vào Dự án> Thêm tài liệu tham khảo. Cuộn xuống nửa chừng để tìm System.Configuration Nhấp vào OK, sau đó cập nhật dòng mã theo nhận xét của Nathan.
Robot70,

7

Tên mặc định cho tệp cấu hình là [yourexe] .exe.config. Vì vậy, notepad.exe sẽ có một tệp cấu hình có tên notepad.exe.config, trong cùng thư mục với chương trình. Đây là tệp cấu hình chung cho tất cả các khía cạnh của CLR và Framework, nhưng nó có thể chứa cài đặt của riêng bạn dưới một <appSettings>nút.

Phần <appSettings>tử tạo ra một tập hợp các cặp tên-giá trị có thể được truy cập bằng System.Configuration.ConfigurationSettings.AppSettings. Tuy nhiên, không có cách nào để lưu các thay đổi trở lại tệp cấu hình.

Bạn cũng có thể thêm các phần tử tùy chỉnh của riêng mình vào tệp cấu hình - ví dụ: để xác định cài đặt có cấu trúc - bằng cách tạo một lớp triển khai IConfigurationSectionHandlervà thêm nó vào <configSections>phần tử của tệp cấu hình. Sau đó, bạn có thể truy cập nó bằng cách gọi điện ConfigurationSettings.GetConfig.

.NET 2.0 thêm một lớp mới, System.Configuration.ConfigurationManagerhỗ trợ nhiều tệp, với sự ghi đè dữ liệu trên mỗi hệ thống của mỗi người dùng. Nó cũng hỗ trợ lưu các cấu hình đã sửa đổi trở lại tệp cài đặt.

Visual Studio tạo một tệp có tên App.config, tệp này sao chép vào thư mục EXE, với tên chính xác, khi dự án được xây dựng.


6

Bài viết hay nhất (IMHO) về cấu hình Ứng dụng .NET nằm trên CodeProject, Làm sáng tỏ những bí ẩn của Cấu hình .NET 2.0 . Và bài viết yêu thích (ngắn hơn) tiếp theo của tôi về các phần trong tệp cấu hình .NET là Tìm hiểu về Trình xử lý Phần - Tệp App.config .


Nó thực sự không phải là cách đơn giản nhất mà người dùng yêu cầu, nhưng việc làm sáng tỏ những bí ẩn của cấu hình .NET 2.0 thực sự là một loạt bài viết tuyệt vời.
Ricardo Amores

3

Trong Windows Forms, bạn có app.configtệp, tệp này rất giống với web.configtệp. Nhưng vì những gì tôi thấy bạn cần là các giá trị tùy chỉnh, tôi khuyên bạn nên sử dụng Cài đặt .

Để làm điều đó, hãy mở thuộc tính dự án của bạn, sau đó chuyển đến cài đặt. Nếu tệp cài đặt không tồn tại, bạn sẽ có một liên kết để tạo một tệp. Sau đó, bạn có thể thêm cài đặt vào bảng mà bạn thấy ở đó, bảng này sẽ tạo ra cả XML thích hợp và Cài đặt lớp có thể được sử dụng để tải và lưu cài đặt.

Lớp cài đặt sẽ được đặt tên như thế nào DefaultNamespace.Properties.Settings. Sau đó, bạn có thể sử dụng mã tương tự như:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}

2

Tôi đồng ý với các câu trả lời khác hướng bạn đến app.config. Tuy nhiên, thay vì đọc các giá trị trực tiếp từ app.config, bạn nên tạo một lớp tiện ích (AppSettings là tên tôi sử dụng) để đọc chúng và hiển thị chúng dưới dạng thuộc tính. Lớp AppSettings có thể được sử dụng để tổng hợp các cài đặt từ một số cửa hàng, chẳng hạn như các giá trị từ app.config và thông tin phiên bản ứng dụng từ assembly (AssemblyVersion và AssemblyFileVersion).



1

Sử dụng:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings đã không được dùng nữa và hiện được coi là lỗi thời ( liên kết ).

Ngoài ra, phần appSettings của app.config đã được thay thế bằng applicationSettings .

Như ai đó đã đề cập, bạn nên sử dụng System.Configuration.ConfigurationManager ( liên kết ) mới cho .NET 2.0.


ConfigurationSettings không được dùng nữa chứ không phải AppSettings.
Toby

0

Bạn đang sử dụng phiên bản .NET và Visual Studio nào?

Khi bạn tạo dự án mới, bạn sẽ có một tệp trong giải pháp của mình có tên là app.config . Đó là tệp cấu hình mặc định.

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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.