以前,仅由 ASCII 大小写不同(例如 /part 与 /PART)的部分名称和替换在 System.IO.Packaging 中未被视为等效项,尽管开放包装公约(OPC)规范要求不区分大小写的等效性(§7.2.3.5,ECMA-376)。 此更改修复了 bug,使 .NET 5-9 符合 .NET Framework 和 OPC 规范。
已引入的版本
.NET 8
以前的行为
URI 比较区分大小写。
如果部件 URI 和重写条目之间的大小写不同,内容类型替代将失败。
某些不符合标准的包包含仅在大小写上不同的重复条目(例如 /part 和 /PART),可能会在加载时导致结果不明确。
新行为
URI 在比较时不区分大小写(StringComparison.OrdinalIgnoreCase)。 具有不同大小写的替代现在按预期工作。 打开时,将拒绝包含多个条目的不符合的包,这些条目仅因大小写而异。 这与 .NET Framework 和 OPC 规范保持一致。
破坏性变更的类型
这是行为 变化。
更改原因
此更改使 System.IO.Packaging 行为与以下保持一致:
- OPC 规范(不区分大小写的 URI 等效性是必需的)。
 - 现有的 .NET Framework 特性,该特性已强制实施不区分大小写的匹配。
 
它可防止不明确的查找并确保一致的结果,并修复 dotnet/runtime#112783。
建议的措施
确保 OPC 包不包含仅因大小写而异的部分名称,因为根据 OPC 规范,这无效。
如果使用违反规范的包:
- 请联系包作者来修复包。
 - 如果需要读取或检查内容,则可以以 ZIP 存档的形式打开包。 与包 API 不同,ZIP 存档不强制实施 OPC 规则,并允许你访问所有条目,包括具有冲突大小写名称的条目。