包部件 URI 现在在 System.IO.Packaging 中不区分大小写

以前,仅由 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 规则,并允许你访问所有条目,包括具有冲突大小写名称的条目。

受影响的 API