Đây là một kịch bản tiêu chuẩn:
if(string.IsNullOrEmpty(Configuration.AppSettings["foobar"]))
throw new SomeStandardException("Application not configured correctly, bozo.");
Vấn đề là, tôi không hoàn toàn chắc chắn đó là ngoại lệ SomeStandardException
nên.
Tôi đã xem xét Khung 3.5 và tìm thấy hai ứng cử viên có khả năng: ConfigurationException
và ConfigurationErrorsException
.
System.Configuration.ConfigurationException
Ngoại lệ được ném ra khi xảy ra lỗi hệ thống cấu hình.
Nhận xét
CácConfigurationException
ngoại lệ được ném nếu những nỗ lực ứng dụng để đọc hoặc ghi dữ liệu vào tập tin cấu hình nhưng không thành công. Một số lý do có thể xảy ra cho điều này có thể bao gồm XML không đúng định dạng trong tệp cấu hình, các vấn đề về quyền đối với tệp và các thuộc tính cấu hình có giá trị không hợp lệ.Ghi chú:
Đối
ConfigurationException
tượng được duy trì để tương thích ngược. ĐốiConfigurationErrorsException
tượng thay thế nó cho hệ thống cấu hình.
Ngoại lệ này thực sự nghe có vẻ hoàn hảo cho những gì tôi cần, nhưng nó đã bị đánh dấu là lỗi thời, vì vậy, ixnay trên atthay.
Điều này khiến chúng ta hoàn toàn khó hiểu ConfigurationErrorsException
:
System.Configuration.ConfigurationErrorsException
Giá trị hiện tại không phải là một trong các giá trị EnableSessionState.
Như bạn có thể thấy, tài liệu của nó là hoàn toàn vô dụng. (Đó là cách làm trong cả trợ giúp địa phương và trực tuyến.) Bản thân việc kiểm tra lớp học cho thấy rằng nó quá mức cần thiết cho những gì tôi muốn.
Tóm lại, tôi cần một ngoại lệ tiêu chuẩn sẽ được ném khi cài đặt cấu hình ứng dụng bị thiếu hoặc chứa giá trị không hợp lệ. Bạn sẽ nghĩ rằng Framework có một ngoại lệ như vậy được đưa vào nó để các ứng dụng sử dụng. (Rõ ràng là có, nhưng nó bị đánh dấu là lỗi thời và được thay thế bằng thứ gì đó có phạm vi lớn hơn nhiều .)
Các giải pháp nào, nếu có, các bạn đang sử dụng cho việc này, và tôi sẽ phải bỏ qua và đưa ra ngoại lệ của riêng mình cho việc này?
Chỉnh sửa Addenda
Một số đã hỏi liệu tôi có thể cung cấp giá trị mặc định hay không và tiếp tục. Trong một số trường hợp, có, và trong những trường hợp đó, ngoại lệ sẽ không được ném ra. Tuy nhiên, đối với một số cài đặt nhất định, điều này sẽ không áp dụng. Ví dụ: tên máy chủ cơ sở dữ liệu và thông tin đăng nhập, máy chủ xác thực và đường dẫn đến các ứng dụng bên thứ ba đã cài đặt.
Cũng cần lưu ý rằng ứng dụng mà tôi chủ yếu đang làm việc là một ứng dụng bảng điều khiển chạy ở chế độ hàng loạt và tôi muốn nó đưa ra một ngoại lệ được phương thức chính bắt và ghi lại một cách thích hợp nếu thứ đó không được định cấu hình thích hợp. (Đó là mã kế thừa mà tôi đã kế thừa và hiện tại chỉ giả định mọi thứ đều ổn.)
System.Configuration.ConfigurationErrorsException
đã được cập nhật.