exe.config 当控制台应用程序 运行 失败时文件被删除

exe.config file getting deleted when console app is run and fails

我有一个控制台应用程序,它似乎在失败时删除了它的 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 不见了。恢复丢失的文件然后允许应用程序按预期 运行。最初的 运行 是在半夜完成的,re运行 是在日程安排应用程序中手动触发的,因此有人手动删除文件的可能性很小。在测试环境中也发生过这种情况。

我无法在 Whosebug 或其他地方找到任何 exe.config 文件被删除的实例,所以希望有人能帮助我解决这个深奥的问题。

编辑:有关信息,调度系统是 Cisco Tidal

编辑 2:配置文件的删除似乎与 nlog 每月滚动其日志文件有关 - 这是其他环境中的故障​​模式,现在是今天早上本地故障

我找到问题了。确实是 NLog。当文件翻转时,它意味着删除我们配置中除最后 12 个翻转文件之外的所有文件。但是有一个错误,它试图删除比这更多的东西——包括应用程序 exe 本身。幸运的是,它在使用中失败了。我将在 github

上向 nlog 社区提出错误

更新:出现的错误:https://github.com/NLog/NLog/issues/2607。社区建议该配置不受支持,解决方法是拒绝它而不是暴露这种意外行为。希望能修复以避免其他人出现此问题