2008-09-22 33 views
78

Tôi thực sự mới đối với .NET và tôi vẫn không nhận được thông tin về cách các tệp cấu hình hoạt động.Cách đơn giản nhất để có tệp cấu hình trong Windows Forms C# Application

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 biểu mẫu cửa sổ.

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

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

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

Tôi muốn chỉ có một tập tin cấu hình với một số giá trị như thế này:

<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 như thế nào để đọc và viết từ/vào một tập tin cấu hình đơn giản?

+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 được gọi là Cài đặt. – Thomas

+2

Từ đẹp "examplain" – Seven

+1

@Seven nó là một lỗi đánh máy nhưng nó có thể có nghĩa là "Giải thích bằng một ví dụ" :) –

Trả lời

110

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

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

Sau đó, bạn thêm phím trong cấu hình/appSettings phần

Giống như:

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

Tiếp cận các thành viên bằng cách làm

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

này hoạt động trong .net 2 trở lên.

+1

Thực ra nó hoạt động trong mọi phiên bản .NET, từ v1.0 trở đi. Lớp mới trong .NET 2.0 là ConfigurationManager. –

+4

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

+0

@ Giống như tôi đã có một cảm giác đó là trường hợp, nhưng tôi không quá chắc chắn. Tôi đã không làm việc nhiều với 1. – qui

0

Bạn đang sử dụng phiên bản .Net và VS nào?

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

6

Bài viết hay nhất (IMHO) về cấu hình Ứng dụng .NET nằm trên CodeProject Unraveling the Mysteries of .NET 2.0 Configuration. Và bài viết yêu thích tiếp theo (ngắn hơn) của tôi về các phần trong tệp cấu hình .net là Understanding Section Handlers - App.config File.

+0

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 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 các bài viết tuyệt vời. –

3

Trong các biểu mẫu Windows, bạn có một app.config, rất giống với web.config. Nhưng vì những gì tôi thấy bạn cần nó là 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ó liên kết để tạo tệp. Sau đó, bạn có thể thêm các thiết lập vào bảng mà bạn thấy ở đó, nó sẽ tạo ra cả XML thích hợp và một lớp Cài đặt có thể được sử dụng để tải và lưu các thiết lập. Lớp cài đặt sẽ được đặt tên giống như 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; 
     } 
    } 
} 
8

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

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

Đảm bảo rằng bạn thêm bằng System.Configuration vào dự án của bạn.

Sau đó, bạn có thể thêm giá trị cho 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 một lưu ý, according to 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."

+0

Rất hữu ích. Giải quyết vấn đề của tôi cho T. –

+0

Trong Visual Studio 2015: Nhấp vào Dự án> Thêm tham chiếu. Cuộn xuống nửa chừng để tìm System.Configuration Nhấp 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 tin cấu hình là [yourexe] .exe.config . Vì vậy, notepad.exe sẽ có một tập tin cấu hình có tên là 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à Khung, nhưng có thể chứa các cài đặt của riêng bạn dưới một nút <appSettings>.

Phần tử <appSettings> tạo tập hợp các cặp tên-giá trị có thể được truy cập là System.Configuration.ConfigurationSettings.AppSettings. Tuy nhiên, không có cách nào để lưu các thay đổi về 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 lớp thực hiện IConfigurationSectionHandler và thêm vào phần tử <configSections> của tệp cấu hình. Sau đó, bạn có thể truy cập bằng cách gọi số ConfigurationSettings.GetConfig.

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

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

62

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

1) Thêm một tập tin mới để dự án của bạn (Add-> New item-> Ứng dụng tập tin cấu hình)

2) Các tập tin cấu hình mới sẽ xuất hiện trong Giải pháp Explorer dưới dạng App.Config.

3) Thêm các thiết lập của bạn vào tập tin này bằng cách sử dụng theo mẫu sau

<configuration> 
    <appSettings> 
    <add key="setting1" value="key"/> 
    </appSettings> 
    <connectionStrings> 
    <add name="prod" connectionString="YourConnectionString"/> 
    </connectionStrings> 
</configuration> 

4) Lấy họ 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 xây dựng, thư mục đầu ra của bạn sẽ chứa một tập tin được gọi là <assemblyname> .exe.config Đây sẽ là một bản sao của tập tin App.Config. Không cần phải làm thêm nữa bởi nhà phát triển để tạo tệp này.

+0

Đ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 tôi, tôi phải thêm DLL System.Configuration vào tham chiếu của mình. –

2

Tôi đồng ý với các câu trả lời khác trỏ 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à trưng ra chúng như các 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ừ ứng dụng.cấu hình và thông tin phiên bản ứng dụng từ assembly (AssemblyVersion và AssemblyFileVersion).

25

Từ đọc nhanh các câu trả lời trước, chúng trông chính xác, nhưng không giống ai đã đề cập đến cơ sở cấu hình mới trong VS 2008. Nó vẫn sử dụng app.config (sao chép vào thời gian biên dịch thành YourAppName.exe. config), nhưng có một widget UI để thiết lập các thuộc tính và xác định các kiểu của chúng. Nhấn đúp vào Settings.settings trong thư mục "Properties" 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à an toàn - trình biên dịch sẽ bắt gặp các lỗi rõ ràng như nhập sai tên thuộc tính. Ví dụ, một tài sản được gọi MyConnectionString trong app.config sẽ được truy cập như:

string s = Properties.Settings.Default.MyConnectionString; 
+0

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

+5

Đẹp, nhưng nó (Thuộc tính dự án | Cài đặt) tạo 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 các tệp nhị phân mới cho khách hàng. – JohnL4

1

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

Cài đặt ứng dụng đã không còn được dùng nữa và hiện được coi là lỗi thời. [link]

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

Khi ai đó đề cập, bạn nên sử dụng System.Configuration.ConfigurationManager [link] đó là mới đối với Net 2.0

2

Một cách rất đơn giản để làm điều này là sử dụng your own custom Settings class của bạn.

+0

+1 cho liên kết ít chi tiết hơn đối với ApplicationSettings tại http://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.aspx dường như đơn giản hơn việc triển khai ConfigurationManager. Nhận/thiết lập cài đặt, không quan tâm đến "XML Shaping". – maxwellb

Các vấn đề liên quan