基于 Unix 的操作系统中的 File.Replace 行为已更改。 它引发的异常现在与 Windows 实现引发的异常匹配。
以前的行为
在 Unix 上,使用 .NET 5,File.Replace 方法会执行以下操作:
- 当 IOException 是一个文件,
Is a directory
是一个目录时,引发sourceFileName
,并显示destinationFileName
消息。 - 当 IOException 是一个目录,
Not a directory
是一个文件时,引发sourceFileName
,并显示destinationFileName
消息。 - 当
sourceFileName
和destinationFileName
指向同一个文件或目录时,将在静默状态下成功。
新行为
在 Unix 上,使用 .NET 6,File.Replace 方法会执行以下操作:
- 当 UnauthorizedAccessException 或
The specified path <path> is not a path
存在且不是文件时,或者当sourceFileName
和destinationFileName
都指向同一个现有目录时,引发sourceFileName
,并显示destinationFileName
消息。 - 当 IOException 和
The source <sourceFileName> and destination <destinationFileName> are the same file
都指向同一个现有文件时,引发sourceFileName
,并显示destinationFileName
消息。
已引入的版本
.NET 6
破坏性变更的类型
此更改可能会影响 源兼容性。
更改原因
进行此更改是为了确保 File.Replace 在各个平台中由于相同的原因而引发相同的异常。
建议的措施
如果你在 Unix 上在 File.Replace 块中调用 try catch
,请确保现在还要捕获 UnauthorizedAccessException。 另外,请注意捕获的新行为。