我有一个控制台应用程序,它似乎在失败时删除了它的exe.config文件。失败记录为
2018-03-01 00:16:49.4742 - ERROR: System.IO.IOException: The device is not ready.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileSystemEnumerableIterator`1.CommonInit()
at System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost)
at System.IO.DirectoryInfo.InternalGetFiles(String searchPattern, SearchOption searchOption)
at System.IO.DirectoryInfo.GetFiles(String searchPattern)
at [my code]...
控制台应用程序由调度程序运行,并在大约8分钟后重新运行,因此失败但没有输出。随后的调查显示exe.config丢失了。恢复丢失的文件然后允许应用程序按预期运行。初始运行在半夜完成,并在计划应用程序中手动触发重新运行,因此有人手动删除文件的可能性很小。在测试环境中也会发生这种情况。
我无法在stackoverflow或其他地方找到任何exe.config文件被删除的实例,所以希望有人可以帮助我解决这个深奥的问题。
编辑:有关信息,调度系统是Cisco Tidal
编辑2:配置文件的删除似乎与每月滚动日志文件的nlog相关联 - 这是其他环境中的故障模式,现在是今天早上的本地
答案 0 :(得分:0)
我找到了这个问题。确实是NLog。当文件翻转时,它意味着删除我们配置中除了最后12个翻转文件之外的所有文件。但是有一个错误,它试图删除很多 - 包括应用程序exe本身。幸运的是,这在使用中失败了。我将在github
上提出nlog社区的错误更新:提出错误:https://github.com/NLog/NLog/issues/2607。社区已经建议不支持配置,并且修复将拒绝它而不是暴露这种意外行为。希望能够修复以避免其他任何人出现此问题