2010-01-31 18 views
17

Chúng tôi đã tạo một ứng dụng WinForms và lưu trữ một số cấu hình thông qua lớp ConfigurationManager. Để lưu trữ thông tin tôi sử dụngKhi nào app.config được tạo, khi một app.exe.config và sự khác biệt là gì

Configuration pConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
pConfig.AppSettings.Settings.Add("updates", szUpdatesURL); 
pConfig.Save(ConfigurationSaveMode.Modified); 

Vấn đề ở đây là trong một số trường hợp, ứng dụng sẽ tạo một tệp "appname" .config và trong trường hợp khác là "appname" .exe.config.

Ở đây tôi phải lưu ý rằng tệp cấu hình không được gửi theo mặc định vì nó không phải lúc nào cũng được yêu cầu.

Các cấu hình được lưu lần đầu tiên chương trình được thực thi. Điều này đã gây ra cho chúng tôi một vấn đề, và tôi không thể xác định các dịp khi cái này hay cái kia được tạo ra.

Tôi đã thực hiện các thử nghiệm, trên cùng một máy tính, với cùng một điểm .exe và tôi nhận được cả hai kết quả. Những gì đang xảy ra ở đây?

Sự khác biệt giữa hai yếu tố đó là gì và làm cách nào để tôi có thể chỉ định loại nào sẽ được tạo? Rất cám ơn

+0

Có lý do nào khiến bạn không thể gửi tệp cấu hình trống không? – Paolo

+0

@Paolo Không thực sự, nhưng vấn đề là chúng tôi đã triển khai ban đầu theo cách này và nhu cầu về tệp cấu hình, đã xuất hiện trên phiên bản mới hơn. Vì vậy, điều này gây ra một số vấn đề cho người dùng phiên bản cũ đang cố nâng cấp. –

Trả lời

21

"appname.exe.config" được tự động tạo cho bạn khi bạn biên dịch ứng dụng của mình. Đây là tệp cần được phân phối cho người dùng cuối của bạn (cùng với tệp exe, tất nhiên). Các cài đặt bạn đặt trong appname.config được chuyển sang appname.exe.config. They are essentially the same files. Lý do appname.config tồn tại là vì khi tệp thực thi được chạy, tệp cấu hình của nó đơn giản là tên thực thi với hậu tố .config. Tuy nhiên, nếu tên của tệp thi hành đã thay đổi, bạn sẽ phải thay đổi tên của tệp exe.config theo cách thủ công. Do đó, bằng cách tự động đổi tên tại thời gian biên dịch, app.config có thể thay đổi tên của nó thành tệp newappname.exe.config và CLR vẫn sẽ nhận nó. Có thể bạn sẽ thấy rằng tệp appname.exe.config được tạo trong thư mục bin. Tôi hy vọng điều đó rõ ràng :) Các liên kết bên dưới có thể giải thích nó sâu hơn một chút.

Có giải thích tốt here. Một bài đọc hay khác là trên CodePlex.

+0

Cảm ơn. Tuy nhiên, mối quan tâm chính của tôi là tôi không gửi một tập tin cấu hình với exe theo mặc định. Trong một số trường hợp chương trình tạo ra một tập tin cấu hình. Và trong những trường hợp này là nơi tôi có vấn đề mà đôi khi nó tạo ra ví dụ "Appname" .config và lần khác nó tạo ra "Appname" .exe.config. Đây là những gì đã làm tôi bối rối, vì tôi hiểu rằng tên file cài đặt mặc định nên là * .exe.config –

+0

Từ các bài kiểm tra tôi đã thực hiện, tôi đã không đưa ra một kết luận theo khi thực sự là "appname" .config thực sự là được tạo. Tuy nhiên, rõ ràng là để tránh nhầm lẫn như vậy, chúng tôi sẽ gửi một "tên ứng dụng" .exe.config theo mặc định. –

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