Почему файл app.config с нулевым байтом вызывает очень странную ошибку? - PullRequest
7 голосов
/ 15 июля 2011

Error

Объем файла был изменен извне, так что открытый файл больше не действителен.

Это вызвано тем, что у вас есть app.config, который равен нулю байтов. Ошибка появляется из-за Windows - даже WinDBG не запустит ее.

Я знаю, что иметь нулевой байт app.config совершенно неверно, но что вызывает эту ошибку, откуда она возникает и почему?

1 Ответ

8 голосов
/ 15 июля 2011
//
// 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

Скопировано из файла заголовка Windows SDK WinError.h.Символический код ошибки здесь, очевидно, гораздо более уместен, чем текст сообщения об ошибке.Это не совсем необычно.Я вижу, как он используется внутри исходного кода SSCLI20 (версия CLR с открытым исходным кодом) в коде, который проверяет, имеет ли исполняемый файл правильный заголовок файла PE32 и заголовок .NET в управляемой сборке.Понятно, что здесь это не применимо.

Тем не менее, CLR заинтересован в файле app.exe.config в самый ранний момент на этапе начальной загрузки.Такие элементы, как <supportedRuntime>, должны быть проанализированы, прежде чем CLR сможет начать работу.Очевидно, этот код не устраивает пустой файл .config.Код CLR просто потрясающий, он никогда не справляется с задачей «давай споткнемся».

...