Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么零字节的app.config文件会导致一个非常奇怪的错误?_C#_App Config_Console Application - Fatal编程技术网

C# 为什么零字节的app.config文件会导致一个非常奇怪的错误?

C# 为什么零字节的app.config文件会导致一个非常奇怪的错误?,c#,app-config,console-application,C#,App Config,Console Application,文件的卷已被外部更改,因此打开的文件不再有效。 这是当您的app.config为零字节时造成的。错误似乎来自Windows-即使WinDBG也不会启动它 我知道零字节的app.config是完全无效的,但是是什么导致了这个错误,它来自哪里,为什么会发生 // // MessageId: ERROR_FILE_INVALID // // MessageText: // // The volume for a file has been externally altered so that the

文件的卷已被外部更改,因此打开的文件不再有效。

这是当您的app.config为零字节时造成的。错误似乎来自Windows-即使WinDBG也不会启动它

我知道零字节的app.config是完全无效的,但是是什么导致了这个错误,它来自哪里,为什么会发生

//
// 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
从WinError.h Windows SDK头文件复制。这里的符号错误代码显然比样板错误消息文本更相关。这并不罕见。我可以看到它在SSCLI20源代码(CLR的开源版本)中使用,用于检查可执行文件是否具有正确的PE32文件头和托管程序集中存在的.NET头。显然这不适用于这里


然而,CLR在引导阶段的很早阶段就对app.exe.config文件感兴趣。在启动CLR之前,必须对
等元素进行解析。显然,这段代码不喜欢空的.config文件。CLR代码就是这么棒的,它从来没有“让我们绊倒在任何地方”的借口。

。配置文件通常是xml文件,所以即使它是空的,在开始时也需要一些xml结构/签名。因此,配置文件是空的,无法解析为XML,因此我认为这是一种阻止应用程序运行的内部安全机制,因为任何更改.config文件的工具或程序都不会导致其处于该状态,因此必须手动更改,这将导致程序运行不正确。至少,这是安全措施的又一步。谢谢你提供的信息!以后我会记得看WinError.h来了解这类事情。我猜在托管代码中没有办法处理这种情况?当然有!修复文件。不,不是托管代码。