2011-07-14 23 views
6

ErrorTại sao tệp tin app.config bằng 0 byte gây ra một lỗi rất lạ?

Âm lượng cho tệp đã bị thay đổi bên ngoài để tệp mở không còn giá trị.

Điều này xảy ra khi bạn có app.config bằng 0 byte. Lỗi xuất hiện đến từ Windows - thậm chí WinDBG sẽ không khởi chạy nó.

Tôi biết hoàn toàn không hợp lệ khi có app.config 0 byte, nhưng nguyên nhân gây ra lỗi này, nó đến từ đâu và tại sao nó xảy ra?

+0

tệp .config thường là tệp xml, vì vậy ngay cả khi nó trống, nó cần một số cấu trúc/chữ ký xml trong đầu. Vì vậy, tệp cấu hình, vì nó trống, không thể được phân tích cú pháp dưới dạng XML, vì vậy tôi nghĩ đó là cơ chế bảo mật nội bộ để ngăn ứng dụng chạy, vì không có công cụ hoặc chương trình nào thay đổi tệp .config. trạng thái đó, vì vậy nó PHẢI được thay đổi bằng tay, điều này sẽ khiến chương trình chạy không chính xác. ít nhất, đó là một bước nữa của biện pháp an ninh. –

Trả lời

7
// 
// MessageId: ERROR_FILE_INVALID 
// 
// MessageText: 
// 
// The volume for a file has been externally altered so that the opened file is no longer valid. 
// 
#define ERROR_FILE_INVALID    1006L 

Được sao chép từ tệp tiêu đề WindowsError.h Windows SDK. Mã lỗi biểu tượng ở đây rõ ràng là thích hợp hơn nhiều so với văn bản thông báo lỗi soạn thảo. Điều này không phải là khá bất thường. Tôi có thể thấy nó đang được sử dụng bên trong mã nguồn SSCLI20 (phiên bản nguồn mở của CLR) trong mã kiểm tra xem tệp thực thi có tiêu đề tệp PE32 thích hợp và tiêu đề .NET có trong một assembly được quản lý hay không. Rõ ràng là không áp dụng ở đây.

Tuy nhiên, CLR quan tâm đến tệp app.exe.config tại thời điểm rất sớm trong giai đoạn khởi động. Các phần tử như <supportedRuntime> phải được phân tích cú pháp trước khi CLR có thể bắt đầu. Rõ ràng mã này không hài lòng với tệp .config trống. Mã CLR là tuyệt vời như vậy, nó không bao giờ làm 'chúng ta hãy vấp ngã trên anyway' cop-out.

+0

Cảm ơn thông tin! Tôi sẽ nhớ nhìn vào WinError.h cho những thứ này trong tương lai. Tôi đoán sẽ không có cách nào để xử lý loại tình huống này trong mã được quản lý? –

+1

Tất nhiên là có! Sửa tệp. Vâng, không, không được quản lý mã. –

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