本次升级包含多项高风险的公开 API 变更,其中 DocumentObjectType 枚举的整体重编号会在不重新编译的情况下造成静默的行为错误,是最高风险项。
MissingMethodException、TypeLoadException,或因枚举常量内联而静默使用错误数值。string 改为 int,涉及构造函数、Id、集合查找/索引器、Paragraph.AppendPermStart/End。SDTContent/SDTInlineContent 删除,SDT Row/Cell 不再是 TableRow/TableCell,丢失大量表格能力。DocumentObjectCollection 由抽象变具体且更换基类,DocumentSubsetCollection 删除,多个集合更换基类,Add 的返回类型由 int 改为 void。ChildObjects/FirstChild/LastChild/GetIndex 从 DocumentObject 下移到 CompositeDocumentObject。508 → 507(+8 / -9),公开成员 5460 → 5527(+178 / -111 / ~97)。67 个类型共丢失 250 个有效成员槽,去重后为 90 个唯一签名;114 个类型的元数据发生变化。| 项目 | 14.9.11 | 14.10.9 |
|---|---|---|
| 程序集 | Spire.Doc.dll | Spire.Doc.dll |
| 路径 | E:\packges\netdll\spire.doc_14.9.11\BIN\NET4.6\Spire.Doc.dll | E:\packges\netdll\spire.doc_14.10.6\BIN\NET4.6\Spire.Doc.dll |
| AssemblyVersion | 14.9.11.0 | 14.10.9.0 |
| FileVersion | 14.9.11.3046 | 14.10.9.3046 |
| 文件大小 | 20,976,616 字节 | 21,020,672 字节(+44,056) |
| SHA256 | 9bc4566b89b5cb1abe82a9fcbb726ce20a2edfd0b7b2f6657e1b68b6bf35f1e5 | 5a9ba3712321fcc3f91b1273927b4714933a726ffce1cbe6e6b4f148ee6cd0a3 |
| 公钥标记 | 663f351905198cb3 | 663f351905198cb3(同一强名称) |
| XML 文档 | 1,215,855 字节 | 1,266,435 字节(+50,580) |
两个版本的引用程序集列表完全一致(HarfBuzzSharp、mscorlib、System、System.Core、System.Data、System.Drawing、System.Web、System.Windows.Forms、System.Xml),未新增或移除程序集依赖。
注意:程序集版本号已变化。.NET Framework 的强名称绑定不会自动接受更高版本;未配置
bindingRedirect时,旧应用可能在加载阶段就失败。
| 指标 | 14.9.11 | 14.10.9 | 变化 |
|---|---|---|---|
| 公开类型 | 508 | 507 | +8 / -9 |
| 公开成员(DeclaredOnly) | 5460 | 5527 | +178 / -111 / ~97 |
| 新增类型 | — | 8 | 见附录 A |
| 移除类型 | 9 | — | 见附录 B |
| 新增成员 | — | 178 | 37 个随新类型引入,141 个加在既有类型上 |
| 移除成员 | 111 | — | 28 个随类型移除;83 个在幸存类型上 |
| 其中:直接声明移除 | — | 54 | 新版本中该类型及祖先均不再提供 |
| 其中:仍可继承访问 | — | 29 | 已上移到基类;其中 2 项签名发生变化 |
| 修改成员 | — | 97 | 60 个枚举值 + 37 个非枚举修改 |
| 有效成员面丢失 | — | 250 槽 / 67 类型 | 去重后 90 个唯一签名 |
| 有效成员面新增 | — | 917 槽 / 112 类型 | 主要来自新基类/新接口 |
| 类型元数据变化 | — | 114 | 基类、接口、抽象性等 |
| XML docId 匹配率 | 77.8% | 77.7% | 用于交叉校验,不影响结论 |
口径说明:
BindingFlags.Public | DeclaredOnly 导出的成员,不含继承成员;构造函数只统计公开构造函数。DocumentObjectType 枚举整体重编号(最高风险:静默错误)旧版本 64 个常量,新版本 62 个:删除 4 个 SDT content 常量,新增 2 个 SDT Mark 常量,并且几乎所有常量的数值都变了。
完整映射表(仅列出变化项)
| 成员 | 旧值 | 新值 | 状态 |
|---|---|---|---|
| Document | 0 | 1 | 数值变更 |
| Section | 1 | 2 | 数值变更 |
| Body | 2 | 3 | 数值变更 |
| HeaderFooter | 3 | 4 | 数值变更 |
| Paragraph | 4 | 5 | 数值变更 |
| StructureDocumentTag | 5 | 6 | 数值变更 |
| StructureDocumentTagInline | 6 | 9 | 数值变更 |
| StructureDocumentTagMarkStart | — | 7 | 新增 |
| StructureDocumentTagRow | 7 | 10 | 数值变更 |
| StructureDocumentTagCell | 8 | 11 | 数值变更 |
| StructureDocumentTagMarkEnd | — | 8 | 新增 |
| SDTBlockContent | 9 | — | 删除 |
| SDTInlineContent | 10 | — | 删除 |
| SDTRowContent | 11 | — | 删除 |
| SDTCellContent | 12 | — | 删除 |
| Table | 13 | 12 | 数值变更 |
| TableRow | 14 | 13 | 数值变更 |
| TableCell | 15 | 14 | 数值变更 |
| TextRange | 16 | 15 | 数值变更 |
| Picture | 17 | 16 | 数值变更 |
| FieldStart | 18 | 17 | 数值变更 |
| Field | 19 | 18 | 数值变更 |
| FieldMark | 20 | 19 | 数值变更 |
| FieldSeparator | 21 | 20 | 数值变更 |
| FieldEnd | 22 | 21 | 数值变更 |
| MergeField | 23 | 22 | 数值变更 |
| SeqField | 24 | 23 | 数值变更 |
| EmbededField | 25 | 24 | 数值变更 |
| ControlField | 26 | 25 | 数值变更 |
| TextFormField | 27 | 26 | 数值变更 |
| DropDownFormField | 28 | 27 | 数值变更 |
| CheckBox | 29 | 28 | 数值变更 |
| BookmarkStart | 30 | 29 | 数值变更 |
| BookmarkEnd | 31 | 30 | 数值变更 |
| MoveFromRangeStart | 32 | 31 | 数值变更 |
| MoveFromRangeEnd | 33 | 32 | 数值变更 |
| MoveToRangeStart | 34 | 33 | 数值变更 |
| MoveToRangeEnd | 35 | 34 | 数值变更 |
| PermissionStart | 36 | 35 | 数值变更 |
| PermissionEnd | 37 | 36 | 数值变更 |
| Shape | 38 | 37 | 数值变更 |
| ShapeGroup | 39 | 38 | 数值变更 |
| ShapeLine | 40 | 39 | 数值变更 |
| ShapePath | 41 | 40 | 数值变更 |
| ShapeRect | 42 | 41 | 数值变更 |
| Comment | 43 | 42 | 数值变更 |
| Footnote | 44 | 43 | 数值变更 |
| TextBox | 45 | 44 | 数值变更 |
| Break | 46 | 45 | 数值变更 |
| Symbol | 47 | 46 | 数值变更 |
| TOC | 48 | 47 | 数值变更 |
| XmlParaItem | 49 | 48 | 数值变更 |
| Undefined | 50 | -2 | 数值变更 |
| CommentMark | 51 | 49 | 数值变更 |
| OleObject | 52 | 50 | 数值变更 |
| CustomXml | 53 | 51 | 数值变更 |
| SmartTag | 54 | 52 | 数值变更 |
| OfficeMath | 55 | 53 | 数值变更 |
| System | 56 | -1 | 数值变更 |
| Ruby | 57 | 54 | 数值变更 |
| SubDocument | 58 | 55 | 数值变更 |
| SpecialChar | 59 | 56 | 数值变更 |
| GlossaryDocument | 60 | 57 | 数值变更 |
| BuildingBlock | 61 | 58 | 数值变更 |
| FormField | 62 | 59 | 数值变更 |
| Any | 63 | 0 | 数值变更 |
旧版本完整数值序列
Document=0, Section=1, Body=2, HeaderFooter=3, Paragraph=4, StructureDocumentTag=5, StructureDocumentTagInline=6, StructureDocumentTagRow=7, StructureDocumentTagCell=8, SDTBlockContent=9, SDTInlineContent=10, SDTRowContent=11, SDTCellContent=12, Table=13, TableRow=14, TableCell=15, TextRange=16, Picture=17, FieldStart=18, Field=19, FieldMark=20, FieldSeparator=21, FieldEnd=22, MergeField=23, SeqField=24, EmbededField=25, ControlField=26, TextFormField=27, DropDownFormField=28, CheckBox=29, BookmarkStart=30, BookmarkEnd=31, MoveFromRangeStart=32, MoveFromRangeEnd=33, MoveToRangeStart=34, MoveToRangeEnd=35, PermissionStart=36, PermissionEnd=37, Shape=38, ShapeGroup=39, ShapeLine=40, ShapePath=41, ShapeRect=42, Comment=43, Footnote=44, TextBox=45, Break=46, Symbol=47, TOC=48, XmlParaItem=49, Undefined=50, CommentMark=51, OleObject=52, CustomXml=53, SmartTag=54, OfficeMath=55, System=56, Ruby=57, SubDocument=58, SpecialChar=59, GlossaryDocument=60, BuildingBlock=61, FormField=62, Any=63
新版本完整数值序列
Undefined=-2, System=-1, Any=0, Document=1, Section=2, Body=3, HeaderFooter=4, Paragraph=5, StructureDocumentTag=6, StructureDocumentTagMarkStart=7, StructureDocumentTagMarkEnd=8, StructureDocumentTagInline=9, StructureDocumentTagRow=10, StructureDocumentTagCell=11, Table=12, TableRow=13, TableCell=14, TextRange=15, Picture=16, FieldStart=17, Field=18, FieldMark=19, FieldSeparator=20, FieldEnd=21, MergeField=22, SeqField=23, EmbededField=24, ControlField=25, TextFormField=26, DropDownFormField=27, CheckBox=28, BookmarkStart=29, BookmarkEnd=30, MoveFromRangeStart=31, MoveFromRangeEnd=32, MoveToRangeStart=33, MoveToRangeEnd=34, PermissionStart=35, PermissionEnd=36, Shape=37, ShapeGroup=38, ShapeLine=39, ShapePath=40, ShapeRect=41, Comment=42, Footnote=43, TextBox=44, Break=45, Symbol=46, TOC=47, XmlParaItem=48, CommentMark=49, OleObject=50, CustomXml=51, SmartTag=52, OfficeMath=53, Ruby=54, SubDocument=55, SpecialChar=56, GlossaryDocument=57, BuildingBlock=58, FormField=59
为什么这是最高风险:C# 编译器会把 const 枚举值内联到调用方程序集中。已有程序集不会在运行时重新读取新 DLL 的枚举值,而是继续使用编译时的旧数字。例如:
| 旧代码中的常量(旧值) | 新版本中同值的含义 | 后果 |
|---|---|---|
| Document (0) | Any (0) | 文档节点被当成任意节点 |
| Body (2) | Section (2) | 正文被当成节 |
| Paragraph (4) | HeaderFooter (4) | 段落被当成页眉页脚 |
| StructureDocumentTag (5) | Paragraph (5) | SDT 被当成段落 |
| Table (13) | TableRow (13) | 表格被当成行 |
| TableCell (15) | TextRange (15) | 单元格被当成文本范围 |
| Field (19) | FieldMark (19) | 域被当成域标记 |
| PermissionStart (36) | PermissionEnd (36) | 权限起点/终点颠倒 |
| Shape (38) | ShapeGroup (38) | 形状被当成形状组 |
| Comment (43) | Footnote (43) | 批注被当成脚注 |
| Break (46) | Symbol (46) | 换行被当成符号 |
| Undefined (50) | OleObject (50) | 未定义值被当成 OLE 对象 |
| System (56) | SpecialChar (56) | 系统节点被当成特殊字符 |
| Any (63) | 无定义(新枚举最大 59) | 越界/未定义行为 |
此外,default(DocumentObjectType) 的含义从 Document 变成了 Any。任何依赖默认值、数值比较、序列化/反序列化、数据库存储或缓存的代码都必须迁移。
处置:
(DocumentObjectType)4),改用常量名。switch 是否覆盖了新值;旧值 63(Any)在新版本没有对应成员。string 改为 int| 类型/成员 | 14.9.11 | 14.10.9 | 影响 |
|---|---|---|---|
| Permission.Id | string | int | 返回类型变更,二进制/源码均破坏 |
| Permission.EditorGroup | get | get/set | 新增 setter,兼容 |
| Permission 构造函数 | Permission(PermissionStart)、Permission(PermissionStart, PermissionEnd) | 全部移除 | 源码/二进制破坏 |
| Permission.Editor | — | string get/set | 新增 |
| Permission.Remove() | — | void | 新增 |
| PermissionStart 构造函数 | (IDocument, string id) | (IDocument, int id) | 参数类型变更 |
| PermissionStart.Id | string | int | 返回类型变更 |
| PermissionStart.Permission | — | Permission get | 新增,替代旧构造函数 |
| PermissionEnd 构造函数 | (IDocument, string id) | (IDocument, int id) | 参数类型变更 |
| PermissionEnd.Id | string | int | 返回类型变更 |
| PermissionEnd.PermissionStart | — | PermissionStart get | 新增 |
| PermissionCollection.FindById | FindById(string) | FindById(int) | 参数类型变更 |
| PermissionCollection 索引器 | this[string id] | 移除 | 改用 this[int index] / FindById(int) |
| PermissionCollection.Remove | Remove(Permission) | Remove(Permission) + Remove(int id) | 新增按 id 删除 |
| PermissionCollection.Count/GetEnumerator | — | 新增 | 新增 |
| Paragraph.AppendPermStart/End | (string id) | (int id) | 参数类型变更 |
迁移示例:
// 旧写法
var start = new PermissionStart(doc, "editor-1");
var permission = new Permission(start);
string id = permission.Id;
var found = doc.Permissions.FindById("editor-1");
var byKey = doc.Permissions["editor-1"]; // 旧版索引器
doc.Permissions.Remove(byKey); // 旧版按对象删除
// 新写法
var start = new PermissionStart(doc, 1);
var permission = start.Permission; // 不再有公开构造函数
int id = permission.Id;
permission.Editor = "editor-1"; // 新增的字符串标识
var found = doc.Permissions.FindById(1);
doc.Permissions.Remove(1); // 新增按 id 删除
如果业务层原本用字符串做权限主键,需要决定新的整数 ID 分配规则(例如数据库自增、文档内序号),并保证 PermissionStart、PermissionEnd、Permission 三处使用同一个整数。
移除的类型:Spire.Doc.Documents.SDTContent(基类 Body)、Spire.Doc.Documents.SDTInlineContent(基类 DocumentObject)。
新增的类型:StructureDocumentTagMarkStart、StructureDocumentTagMarkEnd(均直接继承 ParagraphBase,仅公开 DocumentObjectType)。
结构变化:
| 类型 | 旧基类 | 新基类 | 关键结果 |
|---|---|---|---|
| StructureDocumentTag | BodyRegion | BodyRegion(未变) | SDTContent 属性移除,新增 Body(IBody) |
| StructureDocumentTagInline | ParagraphBase | CompositeDocumentObject | SDTContent 移除;新增 Items/Text/TextNodes/CharacterFormat/修订属性 |
| StructureDocumentTagRow | TableRow | CompositeDocumentObject | 不再是 TableRow;丢失 Cells/RowFormat/Height/HeightType/Hidden/IsHeader/AddCell/GetRowIndex 等 |
| StructureDocumentTagCell | TableCell | CompositeDocumentObject | 不再是 TableCell;丢失 CellFormat/Width/Scaling/GridSpan/Paragraphs/Tables/FormFields/OwnerRow/SplitCell 等 27 项有效成员 |
Row 的构造方式:StructureDocumentTagRow(Table ownerTable) 移除,新增 StructureDocumentTagRow(Document doc)。
Cell 的构造方式:StructureDocumentTagCell(TableRow ownerRow) 移除,新增 StructureDocumentTagCell(Document doc)。
影响:任何把 SDT 行/单元格当普通表格行/单元格使用的代码(样式、行高、单元格宽度、合并、拆分、XHTML 插入、Table.Rows/Table.Cells 遍历)都会编译失败或在运行时不再把它们识别为表格结构。新版本把它们改成“带子节点的复合对象”,需要通过 CompositeDocumentObject 的 DOM API(ChildObjects、AppendChild、InsertBefore 等)访问内容。这是一次语义级重构,不能仅靠类型转换解决。
迁移示例:
// 旧写法
StructureDocumentTag sdt = new StructureDocumentTag(doc);
SDTContent content = sdt.SDTContent;
content.AddParagraph();
// 新写法
StructureDocumentTag sdt = new StructureDocumentTag(doc);
IBody body = sdt.Body;
body.AddParagraph();
// 旧写法:SDT 单元格作为 TableCell
StructureDocumentTagCell cell = new StructureDocumentTagCell(row);
cell.CellFormat.Width = 100;
// 新写法:不再有 CellFormat;改用 CompositeDocumentObject 子节点/子内容 API
StructureDocumentTagCell cell = new StructureDocumentTagCell(doc);
// 具体单元格格式需通过子节点或重新设计文档结构实现,需回归验证
核心变化:
DocumentObjectCollection 从 abstract 变为非抽象,基类由 DocumentItemCollectionBase 改为 OwnerHolder;公开构造函数数量为 0(导出结果中没有公开构造函数),主要通过属性返回。DocumentSubsetCollection 及其嵌套 SubSetEnumerator 被删除。DocumentObjectCollection.Add 的返回类型由 int 改为 void。DocumentObjectCollection 新增以 DocumentObject 为参数的强类型重载;原有 IDocumentObject 重载保留但参数名改为 documentObject。SectionCollection 不再有公开构造函数;IWSectionCollection 删除,改为空的标记接口 ISectionCollection。基类变化一览(集合相关):
| 类型 | 旧基类/状态 | 新基类/状态 | 结果 |
|---|---|---|---|
| DocumentObjectCollection | DocumentItemCollectionBase(abstract) | OwnerHolder(非抽象) | 抽象性变化;Add 返回 void |
| DocumentSubsetCollection | OwnerHolder | 类型删除 | Paragraph/Table 集合的旧基类 |
| CommentsCollection | DocumentItemCollectionBase | DocumentObjectCollection | 获得 Count/Add/Remove/ToArray 等 |
| FieldCollection | DocumentItemCollectionBase | DocumentObjectCollection | 获得集合操作;新增 ToArray |
| FormFieldCollection | DocumentItemCollectionBase | DocumentObjectCollection | 获得集合操作;新增 ToArray |
| TextBoxCollection | DocumentItemCollectionBase | DocumentObjectCollection | 索引器返回类型改为 ShapeObject |
| ParagraphCollection | DocumentSubsetCollection | DocumentObjectCollection | 构造函数参数改为 CompositeDocumentObject;Add 返回 void |
| TableCollection | DocumentSubsetCollection | DocumentObjectCollection | 构造函数参数改为 CompositeDocumentObject;Add 返回 void |
| BookmarkCollection | DocumentItemCollectionBase | OwnerHolder | 新增 Count/GetEnumerator/Remove(string)/ResetBookmarkCache |
| PermissionCollection | DocumentItemCollectionBase | OwnerHolder | FindById(int)/Remove(int)/Count/GetEnumerator |
| ShapeItemCollection | DocumentObjectCollection | DocumentItemCollectionBase | 丢失 Add/Clear/Contains/IndexOf/Insert/Remove/RemoveAt/FirstItem/Item/LastItem/Owner 共 11 项 |
| HeadersFooters | OwnerHolder | DocumentObjectCollection | 新增 Count/Add/Remove/ToArray 等 19 项 |
Add 返回 int → void 的成员(二进制破坏):
DocumentObjectCollection.Add(IDocumentObject)ParagraphCollection.Add(IParagraph)TableCollection.Add(ITable)IParagraphCollection.Add(IParagraph)ITableCollection.Add(ITable)TableCollection.Insert(int, ITable) 同时由 int 改为 void迁移示例:
// 旧写法:依赖返回的索引
int index = body.ChildObjects.Add(paragraph);
int index2 = body.Paragraphs.Add(paragraph);
// 新写法:Add 返回 void,需要索引时自行 IndexOf
body.ChildObjects.Add(paragraph);
int index = body.ChildObjects.IndexOf(paragraph);
body.Paragraphs.Add(paragraph);
int index2 = body.Paragraphs.IndexOf(paragraph);
// 旧写法:强类型重载
row.Cells.Add(cell);
table.Rows.Insert(0, row);
// 新写法:使用 DocumentObject 重载(返回 void)
row.Cells.Add((DocumentObject)cell);
table.Rows.Insert(0, (DocumentObject)row);
基类变化会同时影响继承成员、is/as 转换、重写、序列化和二进制成员解析。
| 类型 | 旧基类 | 新基类 |
|---|---|---|
| Spire.Doc.Collections.BookmarkCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.CommentsCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.DocumentObjectCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.FieldCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.FormFieldCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.ParagraphCollection | Spire.Doc.Collections.DocumentSubsetCollection | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.PermissionCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.ShapeItemCollection | Spire.Doc.Collections.DocumentObjectCollection | Spire.Doc.Collections.DocumentItemCollectionBase |
| Spire.Doc.Collections.TableCollection | Spire.Doc.Collections.DocumentSubsetCollection | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.TextBoxCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Documents.StructureDocumentTagCell | Spire.Doc.TableCell | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Documents.StructureDocumentTagInline | Spire.Doc.Fields.ParagraphBase | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Documents.StructureDocumentTagRow | Spire.Doc.TableRow | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Fields.Comment | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Fields.InlineBody |
| Spire.Doc.Fields.Footnote | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Fields.InlineBody |
| Spire.Doc.Fields.OMath.OfficeMath | Spire.Doc.Fields.ParagraphBase | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Fields.Shapes.ShapeBase | Spire.Doc.Fields.ParagraphBase | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Fields.TableOfContent | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Fields.Field |
| Spire.Doc.HeadersFooters | Spire.Doc.OwnerHolder | Spire.Doc.Collections.DocumentObjectCollection |
重点影响:
Comment、Footnote → InlineBody:两者现在都是“内联正文”,具备 AddParagraph/AddTable、CharacterFormat、修订属性;但失去 ParagraphBase 上的一部分旧能力(如 ApplyCharacterFormat、ToString(string))。OfficeMath、ShapeBase → CompositeDocumentObject:形状/公式现在拥有子节点与正文能力,但不再继承 ParagraphBase。TableOfContent → Field:TOC 现在是域,获得 IField/ITextRange 及域相关能力。StructureDocumentTagRow/Cell → CompositeDocumentObject:不再是表格行/单元格(见 3.3)。ShapeItemCollection 的基类“反向”改回 DocumentItemCollectionBase,丢失集合操作(见 3.4)。以下成员从 DocumentObject 下移到 CompositeDocumentObject:
ChildObjectsFirstChildLastChildGetIndex(IDocumentObject)结果是:复合类型(Body、Section、Table、TableRow、TableCell、Document、Paragraph、Comment、Footnote、形状等)仍可通过新基类访问;但 DocumentObject 本身以及 24 个非复合叶子类型(BookmarkStart/End、Break、Field、TextRange、Symbol、PermissionStart/End、水印类型等)不再暴露这些成员。
| 成员签名 | 受影响类型数 |
|---|---|
| method|ToString(System.String) | 48 |
| method|GetIndex(Spire.Doc.Interface.IDocumentObject) | 24 |
| property|ChildObjects() | 24 |
| property|FirstChild() | 24 |
| property|LastChild() | 24 |
| method|ApplyCharacterFormat(Spire.Doc.Formatting.CharacterFormat) | 11 |
| method|NameToBuiltIn(System.String) | 4 |
| method|EnsureMinimum() | 3 |
| ctor|(Spire.Doc.Collections.BodyRegionCollection) | 2 |
| ctor|(Spire.Doc.Document) | 2 |
说明:ToString(string) 在 48 个类型上消失,是因为它从 DocumentObject 基类被移除;ApplyCharacterFormat 在 11 个类型上消失,是因为这些类型不再继承 ParagraphBase(ParagraphBase 本身仍保留该方法)。
二进制影响:成员上移到基类通常仍能解析(CLR 会沿基类链查找);成员下移到派生类则不同——旧 IL 中的成员引用通常指向原声明类型 DocumentObject,CLR 不会向派生类查找,替换 DLL 后很可能抛 MissingMethodException。因此“仍可通过新基类访问”只对重新编译后的源码成立,不能据此认为旧二进制安全。
| 类型 | 成员 | 旧返回类型 | 新返回类型 |
|---|---|---|---|
| Spire.Doc.BodyRegion | Spire.Doc.Interface.IBody OwnerTextBody { get; } | Spire.Doc.Body | Spire.Doc.Interface.IBody |
| Spire.Doc.Collections.DocumentObjectCollection | System.Void Add(Spire.Doc.Interface.IDocumentObject documentObject) | System.Int32 | System.Void |
| Spire.Doc.Collections.ParagraphCollection | override System.Void Add(Spire.Doc.Interface.IParagraph paragraph) | System.Int32 | System.Void |
| Spire.Doc.Collections.ParagraphItemCollection | Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Collections.TableCollection | override System.Void Add(Spire.Doc.Interface.ITable table) | System.Int32 | System.Void |
| Spire.Doc.Collections.TableCollection | System.Void Insert(System.Int32 index, Spire.Doc.Interface.ITable table) | System.Int32 | System.Void |
| Spire.Doc.Collections.TextBoxCollection | Spire.Doc.Fields.ShapeObject this[System.Int32 index] { get; } | Spire.Doc.Fields.TextBox | Spire.Doc.Fields.ShapeObject |
| Spire.Doc.Documents.Paragraph | Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Documents.TextBodySelection | Spire.Doc.Interface.IBody TextBody { get; } | Spire.Doc.Body | Spire.Doc.Interface.IBody |
| Spire.Doc.Document | Spire.Doc.Interface.IParagraphBase CreateParagraphItem(Spire.Doc.Documents.ParagraphItemType itemType) | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Fields.Comment | Spire.Doc.Interface.IBody Body { get; } | Spire.Doc.Body | Spire.Doc.Interface.IBody |
| Spire.Doc.Fields.Footnote | Spire.Doc.Interface.IBody Body { get; } | Spire.Doc.Body | Spire.Doc.Interface.IBody |
| Spire.Doc.Fields.TextBox | Spire.Doc.Interface.IBody Body { get; } | Spire.Doc.Body | Spire.Doc.Interface.IBody |
| Spire.Doc.Interface.IParagraphCollection | System.Void Add(Spire.Doc.Interface.IParagraph paragraph) | System.Int32 | System.Void |
| Spire.Doc.Interface.IParagraph | Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Interface.ITableCollection | System.Void Add(Spire.Doc.Interface.ITable table) | System.Int32 | System.Void |
| Spire.Doc.Interface.ITextBox | Spire.Doc.Interface.IBody Body { get; } | Spire.Doc.Body | Spire.Doc.Interface.IBody |
| Spire.Doc.Pages.FixedLayoutColumn | Spire.Doc.Interface.IBody Body { get; } | Spire.Doc.Body | Spire.Doc.Interface.IBody |
| Spire.Doc.PermissionEnd | System.Int32 Id { get; } | System.String | System.Int32 |
| Spire.Doc.PermissionStart | System.Int32 Id { get; } | System.String | System.Int32 |
| Spire.Doc.Permission | System.Int32 Id { get; } | System.String | System.Int32 |
模式总结:
Body → IBody(7 项):BodyRegion.OwnerTextBody、Comment.Body、Footnote.Body、TextBox.Body、ITextBox.Body、FixedLayoutColumn.Body、TextBodySelection.TextBody。ParagraphBase → IParagraphBase(4 项):ParagraphItemCollection 索引器、Paragraph 索引器、IParagraph 索引器、Document.CreateParagraphItem。int → void(6 项):集合 Add/Insert(见 3.4)。string → int(3 项):Permission/PermissionStart/PermissionEnd 的 Id。TextBox → ShapeObject(1 项):TextBoxCollection 索引器。DocPicture.Rotation(float → double,旧成员隐藏基类同名属性,新版本改为继承 ShapeBase)、HeadersFooters.GetEnumerator(IEnumerator → IEnumerator<DocumentObject>)。这两项同样会破坏旧二进制。这些变化都会改变 CLR 方法签名(返回类型是签名的一部分),旧二进制会 MissingMethodException;源码层面通常需要显式转换或改用接口。
移除的 9 个公开类型:
| 移除类型 | 种类 | 成员数 | 基类/说明 |
|---|---|---|---|
| Spire.Doc.Collections.DocumentObjectCollection+ChangeItems | Delegate | 4 | System.MulticastDelegate |
| Spire.Doc.Collections.DocumentObjectCollection+ChangeItemsType | Enum | 3 | System.Enum |
| Spire.Doc.Collections.DocumentSubsetCollection | Class | 5 | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.DocumentSubsetCollection+SubSetEnumerator | Class | 4 | System.Object |
| Spire.Doc.CompoundFile.IDocCloneable | Interface | 1 | — |
| Spire.Doc.Documents.IWSectionCollection | Interface | 3 | — |
| Spire.Doc.Documents.SDTContent | Class | 1 | Spire.Doc.Body |
| Spire.Doc.Documents.SDTInlineContent | Class | 5 | Spire.Doc.DocumentObject |
| Spire.Doc.Interface.ITextBoxItemCollection | Interface | 2 | — |
新增的 8 个公开类型:
| 新增类型 | 种类 | 成员数 | 基类/说明 |
|---|---|---|---|
| Spire.Doc.Collections.CommentRangeCollection | Class | 8 | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.TextRangeCollection | Class | 2 | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Documents.ISectionCollection | Interface | 0 | — |
| Spire.Doc.Documents.StructureDocumentTagMarkEnd | Class | 1 | Spire.Doc.Fields.ParagraphBase |
| Spire.Doc.Documents.StructureDocumentTagMarkStart | Class | 1 | Spire.Doc.Fields.ParagraphBase |
| Spire.Doc.Fields.InlineBody | Class | 16 | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | Interface | 8 | — |
| Spire.Doc.Interface.IDocCloneable | Interface | 1 | — |
重点:
Spire.Doc.CompoundFile.IDocCloneable → Spire.Doc.Interface.IDocCloneable。接口身份(Type identity)变化,显式引用旧命名空间的代码会编译失败;反射按全名查找也会失败。IWSectionCollection → ISectionCollection。新接口是空标记接口(0 个声明成员),成员来自 ICollectionBase/IDocumentObjectCollection。SectionCollection 实现了新接口。ITextBoxItemCollection 在旧版本中没有任何公开实现者,也未出现在任何公开成员签名中,实际影响很小,但仍是公开类型删除。DocumentObjectCollection+ChangeItems/ChangeItemsType 是公开嵌套委托/枚举,随集合体系重构删除;未发现对应的公开事件成员,影响有限。| 类型 | 旧构造函数 | 新构造函数 |
|---|---|---|
| Bookmark | Bookmark(BookmarkStart start) | 移除(保留两参构造) |
| PermissionStart | (IDocument, string id) | (IDocument, int id) |
| PermissionEnd | (IDocument, string id) | (IDocument, int id) |
| StructureDocumentTagRow | (Table ownerTable) | (Document doc) |
| StructureDocumentTagCell | (TableRow ownerRow) | (Document doc) |
| CellCollection | (TableRow owner) | (CompositeDocumentObject container) |
| RowCollection | (Table owner) | (CompositeDocumentObject container) |
| ParagraphCollection | (BodyRegionCollection bodyItems) | (CompositeDocumentObject ownerBody) |
| TableCollection | (BodyRegionCollection bodyItems) | (CompositeDocumentObject container) |
| CommentsCollection | (Document doc) | 移除 |
| SectionCollection | (Document doc) | 移除 |
| BodyRegionCollection | (Body body) | 移除 |
| SDTProperties | (DocumentObject owner) | 移除 |
| Permission | 两个公开构造函数 | 全部移除 |
| TextBodySelection | (ParagraphBase, ParagraphBase) | (IParagraphBase, IParagraphBase) |
参数名称变化(仅影响命名实参,源码一般兼容):
DocumentObjectCollection.Add/Contains/IndexOf/Insert/Remove:entity → documentObjectBookmark(BookmarkStart, BookmarkEnd):start/end → bookmarkStart/bookmarkEndFormFieldCollection.ContainsName:itemName → formFieldNameCompositeDocumentObject.IndexOf:docObject → child这里统计的是旧类型自身声明的成员在新版本中被移除;不包含“旧类型因基类变化而丢失的继承成员”。后者计入有效成员面(67 个类型共 250 个槽),典型如 ChildObjects、ToString(string)、ApplyCharacterFormat 的级联消失。
完整清单见附录 D。其中最需要关注的非级联项:
| 类型 | 成员 | 替代/说明 |
|---|---|---|
| Style/ListStyle/ParagraphStyle/TableStyle | static BuiltinStyle NameToBuiltIn(string) | 无直接替代 |
| TextBodyPart | Copy(ParagraphBase, bool)、PasteAfter(ParagraphBase) | 改用 IParagraphBase 重载 |
| TextBodySelection | ctor(ParagraphBase, ParagraphBase) | 改用 IParagraphBase 重载 |
| OfficeMath | ParentParagraph | 改用 OwnerParagraph |
| Comment | Items、EnsureMinimum() | Items → CommentedItems;EnsureMinimum 无直接替代 |
| Footnote | TextBody、EnsureMinimum() | Footnote 自身即 IBody;EnsureMinimum 无直接替代 |
| Paragraph | AppendPermStart(string)、AppendPermEnd(string) | 改用 int 重载 |
| DocumentObject | virtual ToString(string separator) | 无直接替代 |
| SDT 类型 | SDTContent 属性 / SDT Row 的 Cells、RowFormat | 见 3.3 |
| CommentsCollection | Counts()、Remove(Comment) | Count;Remove(DocumentObject)/Comment.Remove() |
| SectionCollection | Add(ISection)、IndexOf(ISection) | DocumentObject 重载 |
| PermissionCollection | FindById(string)、this[string] | FindById(int)/Remove(int) |
另有 2 项:旧声明被基类同名成员取代,但签名发生变化
| 类型 | 旧声明 | 新版本继承自 | 变化 |
|---|---|---|---|
| DocPicture | System.Single Rotation { get; set; } | ShapeBase | float → double;旧成员隐藏了基类同名属性 |
| HeadersFooters | override IEnumerator GetEnumerator() | DocumentObjectCollection | IEnumerator → IEnumerator<DocumentObject> |
DocPicture.Rotation 在旧版本中以 float 隐藏了 ShapeBase.Rotation(double);新版本删除该隐藏声明,因此 DocPicture.Rotation 现在解析为 double。依赖 float 的源码需要显式转换,旧二进制会因返回类型不匹配而失败。
此外,CellCollection/RowCollection 的强类型 Add/IndexOf/Insert/Remove 被移除,但基类 DocumentObjectCollection 仍提供 DocumentObject 版本;ShapeItemCollection 的 11 项集合能力则没有基类兜底。
| 类型 | 成员 | 14.9.11 | 14.10.9 | 兼容性 |
|---|---|---|---|---|
| Bookmark | Name | get | get/set | 新增 setter,兼容 |
| Field | Separator | get | get/set | 新增 setter,兼容 |
| ShapeBase | Size | get | get/set | 新增 setter,兼容 |
| Permission | EditorGroup | get | get/set | 新增 setter,兼容 |
| Document | TextBoxes | get/set | get | setter 移除,破坏 |
Document.TextBoxes 的 setter 被移除:旧代码若整体替换文本框集合将无法编译,应改为通过 DocumentObjectCollection/TextBoxCollection 的增删方法操作现有集合。
以下 4 个成员新增 [Obsolete](IsError = false,仅警告):
DocumentObjectCollection.Insert(int, IDocumentObject):建议 Owner.InsertBefore/InsertAfterDocumentObjectCollection.RemoveAt(int):建议 Owner.Remove(documentObject) 或 documentObject.Remove()ParagraphCollection.Insert(int, IParagraph):同上TableCollection.Insert(int, ITable):同上这体现了新版本的 API 方向:集合自身的增删逐步让位于 CompositeDocumentObject 的 DOM 树操作。
TableRow/TableCell 的遍历、样式、合并、拆分、XHTML 插入逻辑需要重新设计。Body 返回 IBody,可直接 AddParagraph/AddTable;Comment.Items 改为 CommentedItems;Footnote.TextBody 移除,Footnote 自身就是正文。TableOfContent 基类改为 Field,可能影响域更新与类型判断。ShapeBase、OfficeMath 现在有子节点、正文与修订能力;DocPicture/TextBox/ShapeObject 等实现 IBody。DocumentObjectCollection.Add 不再返回索引;集合层级更统一,但依赖具体基类/返回值的代码会受影响。TextBox 以外的形状,旧代码直接赋给 TextBox 会失败。| 变化 | CLR 层后果 | 说明 |
|---|---|---|
| 枚举常量重编号 | 无异常,静默错误 | const 被内联;旧数值在新版本含义不同 |
| 类型删除 | TypeLoadException / MissingMethodException | 签名引用该类型时加载失败 |
| 基类变化 | InvalidCastException / MissingMethodException | 继承成员解析与转换目标改变 |
| 返回类型变化 | MissingMethodException | 返回类型属于 CLR 签名 |
| 参数类型变化(string→int) | MissingMethodException | 签名不匹配 |
| Add/Insert 返回 int→void | MissingMethodException | 签名不匹配 |
| 成员上移到基类 | 通常可解析 | CLR 沿基类链查找成员 |
| 成员下移到派生类 | 很可能 MissingMethodException | 旧 IL 引用原声明类型,不向派生类查找 |
| 新增接口实现 | 兼容 | 不改变已有成员签名 |
| 新增 setter | 兼容 | 新增方法 |
| 移除 setter | MissingMethodException(set_*) | 旧 IL 调用 setter 时失败 |
| 新增 Obsolete | 兼容 | 仅编译警告 |
| 程序集版本变化 | 可能 FileLoadException | 强名称绑定需 bindingRedirect |
结论:即使配置了 bindingRedirect 让程序集加载成功,上述签名/继承变化仍会在首次调用时抛异常;而枚举问题甚至不会抛异常,危害更大。
Add 返回值使用、基类变化导致的成员不可见、setter 移除。[Obsolete]。IParagraphBase/IBody/ShapeObject 返回值、ISectionCollection 索引器、TextBoxCollection 索引器。即使源码全部改到可编译,以下行为仍需回归测试:
CommentedItems 与旧 Items 的差异。Add 后索引、顺序、事件/缓存行为。Count。DocumentObjectType 的判断分支。| 变更 | 二进制 | 源码 | 行为 | 处置级别 |
|---|---|---|---|---|
| DocumentObjectType 重编号 | 静默错误 | 重编译后正常 | 高 | P0 |
| Permission string→int | 破坏 | 破坏 | 高 | P0 |
| SDT Row/Cell 基类变化 | 破坏 | 破坏 | 高 | P0 |
| 类型删除(9 个) | 破坏 | 破坏 | 高 | P0 |
| DocumentObjectCollection 重构 | 破坏 | 破坏 | 中高 | P0 |
| 19 个基类变化 | 破坏 | 破坏 | 高 | P0 |
| 返回类型变化(21 项) | 破坏 | 破坏 | 中 | P1 |
| Add/Insert int→void | 破坏 | 破坏 | 中 | P1 |
| 成员下移(ChildObjects 等) | 很可能破坏 | 需转换 | 中 | P1 |
| 成员上移(Shape 属性等) | 通常兼容 | 兼容 | 低 | P2 |
| 新增 setter/接口/类型 | 兼容 | 兼容 | 低 | P2 |
| Obsolete 标记 | 兼容 | 警告 | 低 | P2 |
| 步骤 | 动作 | 重点检查 |
|---|---|---|
| 1 | 统一重新编译所有引用 Spire.Doc 的项目 | 禁止直接替换 DLL;更新 bindingRedirect 到 14.10.9.0 |
| 2 | 迁移持久化的 DocumentObjectType 数值 | 数据库、JSON、缓存、配置文件;按常量名映射 |
| 3 | Permission 字符串 ID → int | 数据模型、权限范围、FindById/索引器/删除 |
| 4 | 集合 API | Add 返回值、强类型重载、基类类型、索引器返回类型 |
| 5 | SDT 代码 | SDTContent/Body、Row/Cell 的表格能力、构造函数 |
| 6 | ChildObjects/GetIndex/ToString(separator) | 转换为 CompositeDocumentObject 或改用新 DOM API |
| 7 | IBody/IParagraphBase 返回类型 | 显式转换或改用接口 |
| 8 | Comment/Footnote | CommentedItems、Footnote 自身 IBody、EnsureMinimum |
| 9 | 形状/公式 | ApplyCharacterFormat → CharacterFormat/ApplyStyle;Size setter |
| 10 | 回归测试 | SDT、权限、表格、批注、脚注、TOC、页眉页脚、文本框 |
(1)枚举判断
// 重新编译后使用常量名,不要使用数字
if (obj.DocumentObjectType == DocumentObjectType.Paragraph) { ... }
// 如果需要把旧持久化数值迁移到新枚举,先按旧常量名映射:
// 旧 4 (Paragraph) -> 新 Paragraph (5)
// 旧 0 (Document) -> 新 Document (1)
// 旧 63 (Any) -> 新版本无对应成员
(2)ChildObjects / 子节点
// 旧写法:任意 DocumentObject 都可访问
DocumentObjectCollection children = documentObject.ChildObjects;
// 新写法:仅复合对象有 ChildObjects
if (documentObject is CompositeDocumentObject composite)
{
DocumentObjectCollection children = composite.ChildObjects;
DocumentObject first = composite.FirstChild;
int index = composite.GetIndex(child);
}
(3)集合添加
// Add 不再返回索引
body.ChildObjects.Add(paragraph);
int index = body.ChildObjects.IndexOf(paragraph);
// 强类型集合重载已移除,使用 DocumentObject 重载
row.Cells.Add((DocumentObject)cell);
table.Rows.Insert(0, (DocumentObject)row);
(4)返回接口类型
// 旧写法
ParagraphBase item = doc.CreateParagraphItem(ParagraphItemType.TextRange);
Body body = comment.Body;
// 新写法
IParagraphBase item = doc.CreateParagraphItem(ParagraphItemType.TextRange);
IBody body = comment.Body;
// 需要具体类型时显式转换
var paragraph = (Paragraph)item;
(5)Comment / Footnote
// Comment.Items 已移除
foreach (IParagraphBase item in comment.CommentedItems) { ... }
// Footnote.TextBody 已移除;Footnote 自身就是 IBody
footnote.AddParagraph();
IBody footnoteBody = footnote.Body;
(6)TextBodyPart / TextBodySelection
part.Copy((IParagraphBase)paragraphBase, true);
part.PasteAfter((IParagraphBase)paragraphBase);
var selection = new TextBodySelection((IParagraphBase)start, (IParagraphBase)end);
(7)形状格式
// 旧写法:形状上直接 ApplyCharacterFormat
shape.ApplyCharacterFormat(format);
// 新写法:形状不再继承 ParagraphBase,改用 CharacterFormat 属性/ApplyStyle
shape.ApplyStyle("MyStyle");
// 或逐项复制到 shape.CharacterFormat
(8)IDocCloneable / ISectionCollection
// 命名空间迁移
using Spire.Doc.Interface; // 原 Spire.Doc.CompoundFile
IDocCloneable cloneable = obj;
// IWSectionCollection -> ISectionCollection(空标记接口)
ISectionCollection sections = document.Sections;
Section first = (Section)sections; // 索引器返回 IDocumentObject
(9)TextBoxCollection 索引器
// 旧写法
TextBox textBox = document.TextBoxes;
// 新写法:索引器返回 ShapeObject
TextBox textBox = (TextBox)document.TextBoxes;
CellFormat、RowFormat、Cells、合并/拆分等;需要重新设计或寻找替代 API。Style.NameToBuiltIn:没有等价替换;需要维护名称映射表(内置样式名与枚举名并不总是一致)。ApplyCharacterFormat:形状/批注/脚注等类型上无等价方法;逐项复制 CharacterFormat 可能无法完全复现原行为。ToString(string separator):无直接替代;需自行遍历子项拼接。ShapeItemCollection:公开类型仍在,但所有集合操作丢失,且没有公开成员返回该类型;若通过反射/内部途径使用,需要改用其他集合。DocumentObject 新增 GetText()、Remove()、GetAncestor(...)、GetNextInPreOrder(...)、GetPreviousInPreOrder(...)、HasChildNodes;CompositeDocumentObject 新增 AppendChild、PrependChild、InsertBefore、InsertAfter、RemoveChild、RemoveAllChildren、RemoveChildRange、GetChild、GetChildNodes、整型索引器,以及 ChildObjects/FirstChild/LastChild。这组 API 取代了部分集合增删与手工遍历。
新增 IRevisionTracking(8 个成员),35 个类型实现:IsInsertRevision、IsDeleteRevision、IsMoveFromRevision、IsMoveToRevision、InsertRevision、DeleteRevision、MoveFromRevision、MoveToRevision。批注、脚注、段落、域、形状、水印等均可统一处理修订。
CommentRangeCollection:Comment.CommentedItems,支持 Count、索引器、Contains、IndexOf、ToArray、枚举。TextRangeCollection:Paragraph.TextNodes、StructureDocumentTagInline.TextNodes,支持索引器、ToArray、枚举。ToArray():ParagraphCollection、TableCollection、CellCollection、RowCollection、FieldCollection、FormFieldCollection、TextBoxCollection、SectionCollection、ParagraphItemCollection、DocumentObjectCollection。BookmarkCollection:Count、GetEnumerator、Remove(string)、ResetBookmarkCache。PermissionCollection:Count、GetEnumerator、Remove(int)、FindById(int)。HeadersFooters.GetHeaderFooterByType(HeaderFooterType)。TableRow.FirstCell/LastCell。StyleCollection.GetNextAvailableIstd()。DocumentNavigator:MoveToBodyStart/End、MoveToBookmark(含重载)、InsertDropDown。Bookmark.Name 可写;新增 Bookmark.Text、Bookmark.Remove()、BookmarkStart.Bookmark。Field.Separator 可写。ShapeBase.Size 可写;Shape.Title 新增;DocPicture.Size 可写。Permission.Editor、Permission.Remove()、PermissionStart.Permission、PermissionEnd.PermissionStart。Break.Text、Symbol.Text。DocumentObjectCollection 的 DocumentObject 强类型重载与 Count。| 产物 | 路径 | 说明 |
|---|---|---|
| 本报告 | E:\packges\netdll\Spire.Doc_API_Diff_14.9.11_vs_14.10.6.md |
中文详细报告 |
| CSV 全量清单 | E:\packges\netdll\api-diff-tools\out\api-changes.csv |
552 行变更,含 priority / action 迁移优先级列,UTF-8 BOM |
| 旧版 API JSON | E:\packges\netdll\api-diff-tools\out\api-14.9.11.json |
508 类型 / 5460 成员 |
| 新版 API JSON | E:\packges\netdll\api-diff-tools\out\api-14.10.9.json |
507 类型 / 5527 成员 |
| 导出脚本 | E:\packges\netdll\api-diff-tools\dump-api.ps1 |
仅反射导出公开 API |
| 分析脚本 | analyze.py、query.py、refine.py、report_data.py、build_report.py |
差分/查询/有效面/报告生成 |
CSV 列:change, priority, type, member_kind, member_name, category, action, old_signature, new_signature, details。
change 取值:type_added、type_removed、type_modified、member_added、member_removed、member_modified。
priority 口径:P0 必须修改(使用该 API 即编译失败、运行失败或静默错误,169 项)、P1 建议修改(可编译,但存在过时警告、命名实参、继承替代或语义风险,64 项)、P2 仅重编译(新增 API 或纯元数据变化,319 项)。action 给出每行的处置建议。
Assembly.ReflectionOnlyLoadFrom 仅反射加载目标 DLL,不执行其业务代码。GetTypes() 前遍历 GetReferencedAssemblies() 预加载依赖;对本地存在的依赖使用 ReflectionOnlyLoadFrom 兜底。BindingFlags.Public | DeclaredOnly 只导出类型自身声明的公开成员;构造函数只取公开构造函数。DeclaringType 链都公开,避免把内部类型中的 public 嵌套类型误算为导出类型(修正后为 508)。T:/M:/P:/F:/E:),与官方 XML 文档交叉校验。ildasm 报“受保护的模块”。改用正常加载 + Enum.GetValues 独立读取,结果与反射导出一致;同时确认 DocumentObjectType 旧 64 项、新 62 项。typeFullName|kind|name(paramTypeKeys),泛型参数归一化为 !0/!!0,避免把“重载删除+新增”误判为签名修改。protected/internal 成员、方法体行为、性能与序列化格式不在范围内。spr...)会出现在 GetInterfaces() 结果中,报告已过滤;导出 JSON 中可能仍包含,分析时需过滤。Obsolete/Flags/EditorBrowsable)与事件成员之外的高级元数据。| 新增类型 | 种类 | 成员数 | 基类/说明 |
|---|---|---|---|
| Spire.Doc.Collections.CommentRangeCollection | Class | 8 | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.TextRangeCollection | Class | 2 | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Documents.ISectionCollection | Interface | 0 | — |
| Spire.Doc.Documents.StructureDocumentTagMarkEnd | Class | 1 | Spire.Doc.Fields.ParagraphBase |
| Spire.Doc.Documents.StructureDocumentTagMarkStart | Class | 1 | Spire.Doc.Fields.ParagraphBase |
| Spire.Doc.Fields.InlineBody | Class | 16 | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | Interface | 8 | — |
| Spire.Doc.Interface.IDocCloneable | Interface | 1 | — |
| 新增类型 | 种类 | 成员 |
|---|---|---|
| Spire.Doc.Collections.CommentRangeCollection | method | System.Boolean Contains(Spire.Doc.DocumentObject documentObject) |
| Spire.Doc.Collections.CommentRangeCollection | method | System.Boolean Contains(Spire.Doc.Interface.IDocumentObject documentObject) |
| Spire.Doc.Collections.CommentRangeCollection | method | override System.Collections.Generic.IEnumerator<Spire.Doc.Interface.IParagraphBase> GetEnumerator() |
| Spire.Doc.Collections.CommentRangeCollection | method | System.Int32 IndexOf(Spire.Doc.DocumentObject documentObject) |
| Spire.Doc.Collections.CommentRangeCollection | method | System.Int32 IndexOf(Spire.Doc.Interface.IDocumentObject documentObject) |
| Spire.Doc.Collections.CommentRangeCollection | method | Spire.Doc.Interface.IParagraphBase[] ToArray() |
| Spire.Doc.Collections.CommentRangeCollection | property | System.Int32 Count { get; } |
| Spire.Doc.Collections.CommentRangeCollection | property | Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } |
| Spire.Doc.Collections.TextRangeCollection | method | Spire.Doc.Interface.ITextRange[] ToArray() |
| Spire.Doc.Collections.TextRangeCollection | property | Spire.Doc.Interface.ITextRange this[System.Int32 index] { get; } |
| Spire.Doc.Documents.StructureDocumentTagMarkEnd | property | Spire.Doc.Documents.DocumentObjectType DocumentObjectType { get; } |
| Spire.Doc.Documents.StructureDocumentTagMarkStart | property | Spire.Doc.Documents.DocumentObjectType DocumentObjectType { get; } |
| Spire.Doc.Fields.InlineBody | method | Spire.Doc.Documents.Paragraph AddParagraph() |
| Spire.Doc.Fields.InlineBody | method | Spire.Doc.Table AddTable() |
| Spire.Doc.Fields.InlineBody | method | Spire.Doc.Table AddTable(System.Boolean showBorder) |
| Spire.Doc.Fields.InlineBody | method | override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) |
| Spire.Doc.Fields.InlineBody | method | override System.Void ApplyStyle(System.String styleName) |
| Spire.Doc.Fields.InlineBody | property | Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } |
| Spire.Doc.Fields.InlineBody | property | Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; } |
| Spire.Doc.Fields.InlineBody | property | Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; } |
| Spire.Doc.Fields.InlineBody | property | System.Boolean IsDeleteRevision { get; } |
| Spire.Doc.Fields.InlineBody | property | System.Boolean IsInsertRevision { get; } |
| Spire.Doc.Fields.InlineBody | property | System.Boolean IsMoveFromRevision { get; } |
| Spire.Doc.Fields.InlineBody | property | System.Boolean IsMoveToRevision { get; } |
| Spire.Doc.Fields.InlineBody | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; } |
| Spire.Doc.Fields.InlineBody | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; } |
| Spire.Doc.Fields.InlineBody | property | Spire.Doc.Documents.Paragraph OwnerParagraph { get; } |
| Spire.Doc.Fields.InlineBody | property | System.String StyleName { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | System.Boolean IsDeleteRevision { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | System.Boolean IsInsertRevision { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | System.Boolean IsMoveFromRevision { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | System.Boolean IsMoveToRevision { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; } |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; } |
| Spire.Doc.Interface.IDocCloneable | method | System.Object Clone() |
说明:CommentRangeCollection、TextRangeCollection 是新的类型化集合;InlineBody 是 Comment/Footnote 的新基类;IRevisionTracking 是修订跟踪接口;IDocCloneable 从 CompoundFile 命名空间迁移;ISectionCollection 是空标记接口;两个 StructureDocumentTagMark* 是 SDT 边界标记。
| 移除类型 | 种类 | 成员数 | 基类/说明 |
|---|---|---|---|
| Spire.Doc.Collections.DocumentObjectCollection+ChangeItems | Delegate | 4 | System.MulticastDelegate |
| Spire.Doc.Collections.DocumentObjectCollection+ChangeItemsType | Enum | 3 | System.Enum |
| Spire.Doc.Collections.DocumentSubsetCollection | Class | 5 | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.DocumentSubsetCollection+SubSetEnumerator | Class | 4 | System.Object |
| Spire.Doc.CompoundFile.IDocCloneable | Interface | 1 | — |
| Spire.Doc.Documents.IWSectionCollection | Interface | 3 | — |
| Spire.Doc.Documents.SDTContent | Class | 1 | Spire.Doc.Body |
| Spire.Doc.Documents.SDTInlineContent | Class | 5 | Spire.Doc.DocumentObject |
| Spire.Doc.Interface.ITextBoxItemCollection | Interface | 2 | — |
说明:DocumentSubsetCollection 是旧 ParagraphCollection/TableCollection 的基类;SDTContent/SDTInlineContent 是 SDT 内容包装;CompoundFile.IDocCloneable 迁移到 Interface;IWSectionCollection 被 ISectionCollection 替代;ITextBoxItemCollection 无公开实现者;两个嵌套类型是旧集合变更通知的公开产物。
这 37 个成员全部位于本版本新增的 8 个类型上,完整清单见附录 A.1,此处不再重复列出。
| 类型 | 种类 | 新增成员 | Obsolete |
|---|---|---|---|
| Spire.Doc.Body | property | Spire.Doc.Collections.BodyRegionCollection Items { get; } | — |
| Spire.Doc.BookmarkStart | property | Spire.Doc.Bookmark Bookmark { get; } | — |
| Spire.Doc.Bookmark | method | System.Void Remove() | — |
| Spire.Doc.Bookmark | property | System.String Text { get; set; } | — |
| Spire.Doc.Break | property | System.String Text { get; set; } | — |
| Spire.Doc.Collections.BodyRegionCollection | property | Spire.Doc.BodyRegion this[System.Int32 index] { get; } | — |
| Spire.Doc.Collections.BookmarkCollection | method | override System.Collections.IEnumerator GetEnumerator() | — |
| Spire.Doc.Collections.BookmarkCollection | method | System.Void Remove(System.String bookmarkName) | — |
| Spire.Doc.Collections.BookmarkCollection | method | System.Void ResetBookmarkCache() | — |
| Spire.Doc.Collections.BookmarkCollection | property | System.Int32 Count { get; } | — |
| Spire.Doc.Collections.CellCollection | constructor | CellCollection(Spire.Doc.CompositeDocumentObject container) | — |
| Spire.Doc.Collections.CellCollection | method | Spire.Doc.TableCell[] ToArray() | — |
| Spire.Doc.Collections.DocumentObjectCollection | method | System.Void Add(Spire.Doc.DocumentObject documentObject) | — |
| Spire.Doc.Collections.DocumentObjectCollection | method | System.Boolean Contains(Spire.Doc.DocumentObject documentObject) | — |
| Spire.Doc.Collections.DocumentObjectCollection | method | override System.Collections.Generic.IEnumerator<Spire.Doc.DocumentObject> GetEnumerator() | — |
| Spire.Doc.Collections.DocumentObjectCollection | method | System.Int32 IndexOf(Spire.Doc.DocumentObject documentObject) | — |
| Spire.Doc.Collections.DocumentObjectCollection | method | System.Void Insert(System.Int32 index, Spire.Doc.DocumentObject documentObject) | This method is obsolete. Use Owner.InsertBefore(documentObject, refChild) or Owner.InsertAfter(documentObject, refChild) instead. |
| Spire.Doc.Collections.DocumentObjectCollection | method | System.Void Remove(Spire.Doc.DocumentObject documentObject) | — |
| Spire.Doc.Collections.DocumentObjectCollection | method | Spire.Doc.DocumentObject[] ToArray() | — |
| Spire.Doc.Collections.DocumentObjectCollection | property | System.Int32 Count { get; } | — |
| Spire.Doc.Collections.FieldCollection | method | Spire.Doc.Fields.Field[] ToArray() | — |
| Spire.Doc.Collections.FormFieldCollection | method | Spire.Doc.Fields.FormField[] ToArray() | — |
| Spire.Doc.Collections.ParagraphCollection | constructor | ParagraphCollection(Spire.Doc.CompositeDocumentObject ownerBody) | — |
| Spire.Doc.Collections.ParagraphCollection | method | Spire.Doc.Documents.Paragraph[] ToArray() | — |
| Spire.Doc.Collections.ParagraphItemCollection | method | Spire.Doc.Interface.IParagraphBase[] ToArray() | — |
| Spire.Doc.Collections.PermissionCollection | method | Spire.Doc.Permission FindById(System.Int32 id) | — |
| Spire.Doc.Collections.PermissionCollection | method | override System.Collections.IEnumerator GetEnumerator() | — |
| Spire.Doc.Collections.PermissionCollection | method | System.Void Remove(System.Int32 id) | — |
| Spire.Doc.Collections.PermissionCollection | property | System.Int32 Count { get; } | — |
| Spire.Doc.Collections.RowCollection | constructor | RowCollection(Spire.Doc.CompositeDocumentObject container) | — |
| Spire.Doc.Collections.RowCollection | method | Spire.Doc.TableRow[] ToArray() | — |
| Spire.Doc.Collections.SectionCollection | method | Spire.Doc.Section[] ToArray() | — |
| Spire.Doc.Collections.StyleCollection | method | System.Int32 GetNextAvailableIstd() | — |
| Spire.Doc.Collections.TableCollection | constructor | TableCollection(Spire.Doc.CompositeDocumentObject container) | — |
| Spire.Doc.Collections.TableCollection | method | Spire.Doc.Table[] ToArray() | — |
| Spire.Doc.Collections.TextBoxCollection | method | Spire.Doc.Fields.ShapeObject[] ToArray() | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.DocumentObject AppendChild(Spire.Doc.DocumentObject newChild) | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.DocumentObject GetChild(Spire.Doc.Documents.DocumentObjectType documentObjectType, System.Int32 index, System.Boolean isDeep) | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.Collections.DocumentObjectCollection GetChildNodes(Spire.Doc.Documents.DocumentObjectType documentObjectType, System.Boolean isDeep) | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.Collections.DocumentObjectCollection GetChildNodes(Spire.Doc.Documents.DocumentObjectType[] documentObjectTypes, System.Boolean isDeep) | — |
| Spire.Doc.CompositeDocumentObject | method | override System.Collections.Generic.IEnumerator<Spire.Doc.DocumentObject> GetEnumerator() | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.DocumentObject InsertAfter(Spire.Doc.DocumentObject newChild, Spire.Doc.DocumentObject refChild) | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.DocumentObject InsertBefore(Spire.Doc.DocumentObject newChild, Spire.Doc.DocumentObject refChild) | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.DocumentObject PrependChild(Spire.Doc.DocumentObject newChild) | — |
| Spire.Doc.CompositeDocumentObject | method | System.Void RemoveAllChildren() | — |
| Spire.Doc.CompositeDocumentObject | method | Spire.Doc.DocumentObject RemoveChild(Spire.Doc.DocumentObject oldChild) | — |
| Spire.Doc.CompositeDocumentObject | method | System.Void RemoveChildRange(Spire.Doc.DocumentObject startNode, Spire.Doc.DocumentObject endNode) | — |
| Spire.Doc.CompositeDocumentObject | property | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | — |
| Spire.Doc.CompositeDocumentObject | property | Spire.Doc.DocumentObject FirstChild { get; } | — |
| Spire.Doc.CompositeDocumentObject | property | System.Boolean HasChildNodes { get; } | — |
| Spire.Doc.CompositeDocumentObject | property | Spire.Doc.DocumentObject this[System.Int32 index] { get; } | — |
| Spire.Doc.CompositeDocumentObject | property | Spire.Doc.DocumentObject LastChild { get; } | — |
| Spire.Doc.DocumentObject | method | virtual Spire.Doc.CompositeDocumentObject GetAncestor(Spire.Doc.Documents.DocumentObjectType ancestorType) | — |
| Spire.Doc.DocumentObject | method | virtual Spire.Doc.CompositeDocumentObject GetAncestor(System.Type ancestorType) | — |
| Spire.Doc.DocumentObject | method | Spire.Doc.DocumentObject GetNextInPreOrder(Spire.Doc.DocumentObject rootObject) | — |
| Spire.Doc.DocumentObject | method | Spire.Doc.DocumentObject GetPreviousInPreOrder(Spire.Doc.DocumentObject rootObject) | — |
| Spire.Doc.DocumentObject | method | System.String GetText() | — |
| Spire.Doc.DocumentObject | method | System.Void Remove() | — |
| Spire.Doc.DocumentObject | property | System.Boolean HasChildNodes { get; } | — |
| Spire.Doc.Documents.DocumentNavigator | method | Spire.Doc.Fields.DropDownFormField InsertDropDown(System.String name, System.String[] items, System.Int32 selectedIndex) | — |
| Spire.Doc.Documents.DocumentNavigator | method | System.Void MoveToBodyEnd() | — |
| Spire.Doc.Documents.DocumentNavigator | method | System.Void MoveToBodyStart() | — |
| Spire.Doc.Documents.DocumentNavigator | method | System.Boolean MoveToBookmark(System.String bookmarkName) | — |
| Spire.Doc.Documents.DocumentNavigator | method | System.Boolean MoveToBookmark(System.String bookmarkName, System.Boolean isStart, System.Boolean isAfter) | — |
| Spire.Doc.Documents.DocumentObjectType | field | const Spire.Doc.Documents.DocumentObjectType StructureDocumentTagMarkEnd = 8 | — |
| Spire.Doc.Documents.DocumentObjectType | field | const Spire.Doc.Documents.DocumentObjectType StructureDocumentTagMarkStart = 7 | — |
| Spire.Doc.Documents.Paragraph | method | Spire.Doc.PermissionEnd AppendPermEnd(System.Int32 id) | — |
| Spire.Doc.Documents.Paragraph | method | Spire.Doc.PermissionStart AppendPermStart(System.Int32 id) | — |
| Spire.Doc.Documents.Paragraph | property | Spire.Doc.Collections.TextRangeCollection TextNodes { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagCell | constructor | StructureDocumentTagCell(Spire.Doc.Document doc) | — |
| Spire.Doc.Documents.StructureDocumentTagInline | method | override System.Void ApplyStyle(System.String styleName) | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | System.Boolean IsDeleteRevision { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | System.Boolean IsInsertRevision { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | System.Boolean IsMoveFromRevision { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | System.Boolean IsMoveToRevision { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Collections.ParagraphItemCollection Items { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Documents.Paragraph OwnerParagraph { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | System.String StyleName { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | System.String Text { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagInline | property | Spire.Doc.Collections.TextRangeCollection TextNodes { get; } | — |
| Spire.Doc.Documents.StructureDocumentTagRow | constructor | StructureDocumentTagRow(Spire.Doc.Document doc) | — |
| Spire.Doc.Documents.StructureDocumentTag | property | Spire.Doc.Interface.IBody Body { get; } | — |
| Spire.Doc.Documents.TextBodyPart | method | System.Void Copy(Spire.Doc.Interface.IParagraphBase pItem, System.Boolean clone) | — |
| Spire.Doc.Documents.TextBodyPart | method | System.Void PasteAfter(Spire.Doc.Interface.IParagraphBase paragraphItem) | — |
| Spire.Doc.Documents.TextBodySelection | constructor | TextBodySelection(Spire.Doc.Interface.IParagraphBase itemStart, Spire.Doc.Interface.IParagraphBase itemEnd) | — |
| Spire.Doc.Fields.Comment | property | Spire.Doc.Collections.CommentRangeCollection CommentedItems { get; } | — |
| Spire.Doc.Fields.DocPicture | property | System.Drawing.SizeF Size { get; set; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | method | override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) | — |
| Spire.Doc.Fields.OMath.OfficeMath | method | override System.Void ApplyStyle(System.String styleName) | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | System.Boolean IsDeleteRevision { get; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | System.Boolean IsInsertRevision { get; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | System.Boolean IsMoveFromRevision { get; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | System.Boolean IsMoveToRevision { get; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | Spire.Doc.Documents.Paragraph OwnerParagraph { get; } | — |
| Spire.Doc.Fields.OMath.OfficeMath | property | System.String StyleName { get; } | — |
| Spire.Doc.Fields.ParagraphBase | method | virtual Spire.Doc.CompositeDocumentObject GetAncestor(Spire.Doc.Documents.DocumentObjectType objectType) | — |
| Spire.Doc.Fields.ParagraphBase | property | System.Boolean HasChildNodes { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | method | override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) | — |
| Spire.Doc.Fields.Shapes.ShapeBase | method | override System.Void ApplyStyle(System.String styleName) | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | Spire.Doc.Formatting.Revisions.EditRevision DeleteRevision { get; set; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | Spire.Doc.Formatting.Revisions.EditRevision InsertRevision { get; set; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | System.Boolean IsDeleteRevision { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | System.Boolean IsInsertRevision { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | System.Boolean IsMoveFromRevision { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | System.Boolean IsMoveToRevision { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveFromRevision { get; set; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | Spire.Doc.Formatting.Revisions.MoveRevision MoveToRevision { get; set; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | Spire.Doc.Documents.Paragraph OwnerParagraph { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | System.String StyleName { get; } | — |
| Spire.Doc.Fields.Shapes.ShapeBase | property | System.String Title { get; set; } | — |
| Spire.Doc.Fields.Shapes.Shape | property | System.Boolean ExtrusionEnabled { get; } | — |
| Spire.Doc.Fields.Shapes.Shape | property | System.Boolean ShadowEnabled { get; } | — |
| Spire.Doc.Fields.Shapes.Shape | property | System.Drawing.Color StrokeColor { get; set; } | — |
| Spire.Doc.Fields.Shapes.Shape | property | System.Double StrokeWeight { get; set; } | — |
| Spire.Doc.Fields.Symbol | property | System.String Text { get; set; } | — |
| Spire.Doc.HeadersFooters | method | Spire.Doc.HeaderFooter GetHeaderFooterByType(Spire.Doc.Documents.HeaderFooterType type) | — |
| Spire.Doc.Interface.IBody | method | Spire.Doc.Table AddTable(System.Boolean showBorder) | — |
| Spire.Doc.Interface.IBody | property | Spire.Doc.Interface.IParagraph FirstParagraph { get; } | — |
| Spire.Doc.Interface.IBody | property | Spire.Doc.Collections.BodyRegionCollection Items { get; } | — |
| Spire.Doc.Interface.IParagraphBase | method | System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) | — |
| Spire.Doc.Interface.IParagraphBase | property | Spire.Doc.Formatting.CharacterFormat CharacterFormat { get; } | — |
| Spire.Doc.OwnerHolder | method | override System.Object Clone() | — |
| Spire.Doc.PermissionEnd | constructor | PermissionEnd(Spire.Doc.Interface.IDocument document, System.Int32 id) | — |
| Spire.Doc.PermissionEnd | property | Spire.Doc.PermissionStart PermissionStart { get; } | — |
| Spire.Doc.PermissionStart | constructor | PermissionStart(Spire.Doc.Interface.IDocument doc, System.Int32 id) | — |
| Spire.Doc.PermissionStart | property | Spire.Doc.Permission Permission { get; } | — |
| Spire.Doc.Permission | method | System.Void Remove() | — |
| Spire.Doc.Permission | property | System.String Editor { get; set; } | — |
| Spire.Doc.TableRow | property | Spire.Doc.TableCell FirstCell { get; } | — |
| Spire.Doc.TableRow | property | Spire.Doc.TableCell LastCell { get; } | — |
这些成员在旧类型上自身声明,且新版本中该类型及其祖先均不再提供。因基类变化而丢失的继承成员不在此表,见有效成员面统计。
| 类型 | 被移除成员 | 建议替代 |
|---|---|---|
| Spire.Doc.Bookmark | Bookmark(Spire.Doc.BookmarkStart start) | 改用 Bookmark(BookmarkStart, BookmarkEnd),或 BookmarkStart.Bookmark |
| Spire.Doc.Collections.BodyRegionCollection | BodyRegionCollection(Spire.Doc.Body body) | 通常从 Body.Items 获取;不要自行 new |
| Spire.Doc.Collections.CellCollection | CellCollection(Spire.Doc.TableRow owner) | 从 TableRow.Cells 获取,或使用 CellCollection(CompositeDocumentObject) |
| Spire.Doc.Collections.CellCollection | System.Int32 Add(Spire.Doc.TableCell cell) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.CellCollection | System.Int32 IndexOf(Spire.Doc.TableCell cell) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.CellCollection | System.Void Insert(System.Int32 index, Spire.Doc.TableCell cell) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.CellCollection | System.Void Remove(Spire.Doc.TableCell cell) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.CommentsCollection | CommentsCollection(Spire.Doc.Document doc) | 从 Document.Comments 获取 |
| Spire.Doc.Collections.CommentsCollection | System.Int32 Counts() | 改用 Count |
| Spire.Doc.Collections.CommentsCollection | System.Void Remove(Spire.Doc.Fields.Comment comment) | 改用 Remove(DocumentObject) 或 comment.Remove() |
| Spire.Doc.Collections.ParagraphCollection | ParagraphCollection(Spire.Doc.Collections.BodyRegionCollection bodyItems) | 从 Body.Paragraphs 获取,或使用 ParagraphCollection(CompositeDocumentObject) |
| Spire.Doc.Collections.PermissionCollection | Spire.Doc.Permission FindById(System.String id) | 改用 FindById(int) / Remove(int) |
| Spire.Doc.Collections.PermissionCollection | Spire.Doc.Permission this[System.String id] { get; } | 改用 FindById(int) / Remove(int) |
| Spire.Doc.Collections.RowCollection | RowCollection(Spire.Doc.Table owner) | 从 Table.Rows 获取,或使用 RowCollection(CompositeDocumentObject) |
| Spire.Doc.Collections.RowCollection | System.Int32 Add(Spire.Doc.TableRow row) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.RowCollection | System.Int32 IndexOf(Spire.Doc.TableRow row) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.RowCollection | System.Void Insert(System.Int32 index, Spire.Doc.TableRow row) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.RowCollection | System.Void Remove(Spire.Doc.TableRow row) | 改用基类 DocumentObjectCollection 的 DocumentObject 重载并显式转换 |
| Spire.Doc.Collections.SectionCollection | SectionCollection(Spire.Doc.Document doc) | 从 Document.Sections 获取 |
| Spire.Doc.Collections.SectionCollection | override System.Int32 Add(Spire.Doc.Interface.ISection section) | 改用 DocumentObjectCollection.Add/IndexOf(DocumentObject) |
| Spire.Doc.Collections.SectionCollection | override System.Int32 IndexOf(Spire.Doc.Interface.ISection section) | 改用 DocumentObjectCollection.Add/IndexOf(DocumentObject) |
| Spire.Doc.Collections.TableCollection | TableCollection(Spire.Doc.Collections.BodyRegionCollection bodyItems) | 从 Body.Tables 获取,或使用 TableCollection(CompositeDocumentObject) |
| Spire.Doc.DocumentObject | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | 已下移到 CompositeDocumentObject;转换后访问 |
| Spire.Doc.DocumentObject | Spire.Doc.DocumentObject FirstChild { get; } | 已下移到 CompositeDocumentObject;转换后访问 |
| Spire.Doc.DocumentObject | Spire.Doc.DocumentObject LastChild { get; } | 已下移到 CompositeDocumentObject;转换后访问 |
| Spire.Doc.DocumentObject | virtual System.Int32 GetIndex(Spire.Doc.Interface.IDocumentObject entity) | 已下移到 CompositeDocumentObject;转换后访问 |
| Spire.Doc.DocumentObject | virtual System.String ToString(System.String seperator) | 无直接替代;遍历子项自行拼接文本(可配合 GetText()) |
| Spire.Doc.Documents.DocumentObjectType | const Spire.Doc.Documents.DocumentObjectType SDTBlockContent = 9 | 该 SDT content 概念已移除,无直接替代 |
| Spire.Doc.Documents.DocumentObjectType | const Spire.Doc.Documents.DocumentObjectType SDTCellContent = 12 | 该 SDT content 概念已移除,无直接替代 |
| Spire.Doc.Documents.DocumentObjectType | const Spire.Doc.Documents.DocumentObjectType SDTInlineContent = 10 | 该 SDT content 概念已移除,无直接替代 |
| Spire.Doc.Documents.DocumentObjectType | const Spire.Doc.Documents.DocumentObjectType SDTRowContent = 11 | 该 SDT content 概念已移除,无直接替代 |
| Spire.Doc.Documents.Paragraph | Spire.Doc.PermissionEnd AppendPermEnd(System.String id) | 改用 AppendPermEnd(int id) |
| Spire.Doc.Documents.Paragraph | Spire.Doc.PermissionStart AppendPermStart(System.String id) | 改用 AppendPermStart(int id) |
| Spire.Doc.Documents.SDTProperties | SDTProperties(Spire.Doc.DocumentObject owner) | 从 StructureDocumentTag.SDTProperties 获取 |
| Spire.Doc.Documents.StructureDocumentTag | Spire.Doc.Documents.SDTContent SDTContent { get; } | 改用 StructureDocumentTag.Body(IBody) |
| Spire.Doc.Documents.StructureDocumentTagCell | StructureDocumentTagCell(Spire.Doc.TableRow ownerRow) | SDT Cell 不再是 TableCell;改用 CompositeDocumentObject 子节点 API |
| Spire.Doc.Documents.StructureDocumentTagInline | Spire.Doc.Documents.SDTInlineContent SDTContent { get; } | 改用 Items / Text / TextNodes,或通过 CompositeDocumentObject 子节点访问 |
| Spire.Doc.Documents.StructureDocumentTagRow | Spire.Doc.Collections.CellCollection Cells { get; } | SDT Row 不再是 TableRow;无直接替代,改用子节点/CompositeDocumentObject API |
| Spire.Doc.Documents.StructureDocumentTagRow | Spire.Doc.Formatting.RowFormat RowFormat { get; } | SDT Row 不再是 TableRow;无直接替代 |
| Spire.Doc.Documents.StructureDocumentTagRow | StructureDocumentTagRow(Spire.Doc.Table ownerTable) | SDT Row 不再是 TableRow;改用 CompositeDocumentObject 子节点 API |
| Spire.Doc.Documents.Style | static Spire.Doc.Documents.BuiltinStyle NameToBuiltIn(System.String styleName) | 无直接替代;维护名称到 BuiltinStyle 的映射,或改用 Enum.TryParse + 名称规范化 |
| Spire.Doc.Documents.TextBodyPart | System.Void Copy(Spire.Doc.Fields.ParagraphBase pItem, System.Boolean clone) | 改用 Copy(IParagraphBase, bool) 重载 |
| Spire.Doc.Documents.TextBodyPart | System.Void PasteAfter(Spire.Doc.Fields.ParagraphBase paragraphItem) | 改用 PasteAfter(IParagraphBase) 重载 |
| Spire.Doc.Documents.TextBodySelection | TextBodySelection(Spire.Doc.Fields.ParagraphBase itemStart, Spire.Doc.Fields.ParagraphBase itemEnd) | 改用 TextBodySelection(IParagraphBase, IParagraphBase) |
| Spire.Doc.Fields.Comment | Spire.Doc.Collections.ParagraphItemCollection Items { get; } | 改用 Comment.CommentedItems(CommentRangeCollection) |
| Spire.Doc.Fields.Comment | System.Void EnsureMinimum() | 无直接替代;按需添加段落/内容 |
| Spire.Doc.Fields.Footnote | Spire.Doc.Body TextBody { get; } | Footnote 自身即 IBody,直接调用 AddParagraph/AddTable 等 |
| Spire.Doc.Fields.Footnote | System.Void EnsureMinimum() | 无直接替代;按需添加段落/内容 |
| Spire.Doc.Fields.OMath.OfficeMath | Spire.Doc.Documents.Paragraph ParentParagraph { get; } | 改用 OwnerParagraph |
| Spire.Doc.Fields.ParagraphBase | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | 仅当运行时对象是 CompositeDocumentObject 时可转换后访问;叶子节点改 HasChildNodes |
| Spire.Doc.Permission | Permission(Spire.Doc.PermissionStart start) | 改用 PermissionStart.Permission |
| Spire.Doc.Permission | Permission(Spire.Doc.PermissionStart start, Spire.Doc.PermissionEnd end) | 改用 PermissionStart.Permission;通过 PermissionEnd.PermissionStart 关联 |
| Spire.Doc.PermissionEnd | PermissionEnd(Spire.Doc.Interface.IDocument document, System.String id) | 改用 PermissionEnd(IDocument, int) |
| Spire.Doc.PermissionStart | PermissionStart(Spire.Doc.Interface.IDocument doc, System.String id) | 改用 PermissionStart(IDocument, int) |
这些成员在旧版本中声明于某类型,新版本中该类型或其祖先仍提供同名同签名成员,通常只需重新编译;其中 DocPicture.Rotation 与 HeadersFooters.GetEnumerator 的签名发生变化,不能按“完全兼容”处理。
| 类型 | 旧声明成员 | 新版本中继承自 | 备注 |
|---|---|---|---|
| Spire.Doc.Body | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Collections.CellCollection | System.Void RemoveAt(System.Int32 index) | Spire.Doc.Collections.DocumentObjectCollection | 签名一致,通常只需重编译 |
| Spire.Doc.Collections.CommentsCollection | System.Void Clear() | Spire.Doc.Collections.DocumentObjectCollection | 签名一致,通常只需重编译 |
| Spire.Doc.Collections.CommentsCollection | System.Void RemoveAt(System.Int32 index) | Spire.Doc.Collections.DocumentObjectCollection | 签名一致,通常只需重编译 |
| Spire.Doc.Collections.ParagraphCollection | override System.Void RemoveAt(System.Int32 index) | Spire.Doc.Collections.DocumentObjectCollection | 签名一致,通常只需重编译 |
| Spire.Doc.Collections.TableCollection | System.Void RemoveAt(System.Int32 index) | Spire.Doc.Collections.DocumentObjectCollection | 签名一致,通常只需重编译 |
| Spire.Doc.Collections.TextBoxCollection | System.Void Clear() | Spire.Doc.Collections.DocumentObjectCollection | 签名一致,通常只需重编译 |
| Spire.Doc.Collections.TextBoxCollection | System.Void RemoveAt(System.Int32 index) | Spire.Doc.Collections.DocumentObjectCollection | 签名一致,通常只需重编译 |
| Spire.Doc.Document | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Documents.Paragraph | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Documents.StructureDocumentTag | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Documents.StructureDocumentTagInline | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Documents.StructureDocumentTagRow | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.Comment | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.DocPicture | System.Single Rotation { get; set; } | Spire.Doc.Fields.Shapes.ShapeBase | 返回类型 float→double;旧成员隐藏了基类同名属性,新版本改为继承 ShapeBase,源码/二进制均破坏 |
| Spire.Doc.Fields.Footnote | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.OMath.OfficeMath | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.ShapeObject | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.ShapeObject | System.Boolean ExtrusionEnabled { get; } | Spire.Doc.Fields.Shapes.Shape | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.ShapeObject | System.Boolean ShadowEnabled { get; } | Spire.Doc.Fields.Shapes.Shape | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.ShapeObject | System.Double StrokeWeight { get; set; } | Spire.Doc.Fields.Shapes.Shape | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.ShapeObject | System.Drawing.Color StrokeColor { get; set; } | Spire.Doc.Fields.Shapes.Shape | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.Shapes.ShapeBase | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Fields.TextBox | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.HeadersFooters | override System.Collections.IEnumerator GetEnumerator() | Spire.Doc.Collections.DocumentObjectCollection | 返回类型由 IEnumerator 变为 IEnumerator<DocumentObject>;源码可赋值,二进制签名不匹配 |
| Spire.Doc.Pages.FixedLayoutSpan | Spire.Doc.DocumentObject ParentNode { get; } | Spire.Doc.Pages.LayoutElement | 签名一致,通常只需重编译 |
| Spire.Doc.Section | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.Table | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| Spire.Doc.TableRow | Spire.Doc.Collections.DocumentObjectCollection ChildObjects { get; } | Spire.Doc.CompositeDocumentObject | 签名一致,通常只需重编译 |
| 类型 | 成员 | 变化 |
|---|---|---|
| Spire.Doc.BodyRegion | Spire.Doc.Interface.IBody OwnerTextBody { get; } | 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody |
| Spire.Doc.Body | override Spire.Doc.Table AddTable(System.Boolean showBorder) | 修饰符 [] → [override] |
| Spire.Doc.Bookmark | Bookmark(Spire.Doc.BookmarkStart bookmarkStart, Spire.Doc.BookmarkEnd bookmarkEnd) | 参数名 [start, end] → [bookmarkStart, bookmarkEnd] |
| Spire.Doc.Bookmark | System.String Name { get; set; } | 访问器 get → get set |
| Spire.Doc.Collections.DocumentObjectCollection | System.Void Add(Spire.Doc.Interface.IDocumentObject documentObject) | 返回类型 System.Int32 → System.Void;参数名 [entity] → [documentObject] |
| Spire.Doc.Collections.DocumentObjectCollection | System.Boolean Contains(Spire.Doc.Interface.IDocumentObject documentObject) | 参数名 [entity] → [documentObject] |
| Spire.Doc.Collections.DocumentObjectCollection | System.Int32 IndexOf(Spire.Doc.Interface.IDocumentObject documentObject) | 参数名 [entity] → [documentObject] |
| Spire.Doc.Collections.DocumentObjectCollection | System.Void Insert(System.Int32 index, Spire.Doc.Interface.IDocumentObject documentObject) | 参数名 [index, entity] → [index, documentObject];新增 Obsolete(警告级) |
| Spire.Doc.Collections.DocumentObjectCollection | System.Void Remove(Spire.Doc.Interface.IDocumentObject documentObject) | 参数名 [entity] → [documentObject] |
| Spire.Doc.Collections.DocumentObjectCollection | override System.Void RemoveAt(System.Int32 index) | 新增 Obsolete(警告级);修饰符 [] → [override] |
| Spire.Doc.Collections.FormFieldCollection | System.Boolean ContainsName(System.String formFieldName) | 参数名 [itemName] → [formFieldName] |
| Spire.Doc.Collections.ParagraphCollection | override System.Void Add(Spire.Doc.Interface.IParagraph paragraph) | 返回类型 System.Int32 → System.Void |
| Spire.Doc.Collections.ParagraphCollection | override System.Void Insert(System.Int32 index, Spire.Doc.Interface.IParagraph paragraph) | 新增 Obsolete(警告级) |
| Spire.Doc.Collections.ParagraphItemCollection | Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } | 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Collections.TableCollection | override System.Void Add(Spire.Doc.Interface.ITable table) | 返回类型 System.Int32 → System.Void |
| Spire.Doc.Collections.TableCollection | System.Void Insert(System.Int32 index, Spire.Doc.Interface.ITable table) | 返回类型 System.Int32 → System.Void;新增 Obsolete(警告级) |
| Spire.Doc.Collections.TextBoxCollection | Spire.Doc.Fields.ShapeObject this[System.Int32 index] { get; } | 返回类型 Spire.Doc.Fields.TextBox → Spire.Doc.Fields.ShapeObject |
| Spire.Doc.CompositeDocumentObject | override System.Int32 IndexOf(Spire.Doc.Interface.IDocumentObject child) | 参数名 [docObject] → [child] |
| Spire.Doc.Documents.Paragraph | Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } | 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Documents.TextBodySelection | Spire.Doc.Interface.IBody TextBody { get; } | 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody |
| Spire.Doc.Document | Spire.Doc.Interface.IParagraphBase CreateParagraphItem(Spire.Doc.Documents.ParagraphItemType itemType) | 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Document | Spire.Doc.Collections.TextBoxCollection TextBoxes { get; } | 访问器 get set → get |
| Spire.Doc.Fields.Comment | Spire.Doc.Interface.IBody Body { get; } | 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody |
| Spire.Doc.Fields.Field | Spire.Doc.Fields.FieldMark Separator { get; set; } | 访问器 get → get set |
| Spire.Doc.Fields.Footnote | Spire.Doc.Interface.IBody Body { get; } | 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody |
| Spire.Doc.Fields.ParagraphBase | override System.Void ApplyStyle(Spire.Doc.Documents.DefaultCharacterStyle bstyle) | 修饰符 [] → [override] |
| Spire.Doc.Fields.Shapes.ShapeBase | System.Drawing.SizeF Size { get; set; } | 访问器 get → get set |
| Spire.Doc.Fields.TextBox | Spire.Doc.Interface.IBody Body { get; } | 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody |
| Spire.Doc.Interface.IParagraphCollection | System.Void Add(Spire.Doc.Interface.IParagraph paragraph) | 返回类型 System.Int32 → System.Void |
| Spire.Doc.Interface.IParagraph | Spire.Doc.Interface.IParagraphBase this[System.Int32 index] { get; } | 返回类型 Spire.Doc.Fields.ParagraphBase → Spire.Doc.Interface.IParagraphBase |
| Spire.Doc.Interface.ITableCollection | System.Void Add(Spire.Doc.Interface.ITable table) | 返回类型 System.Int32 → System.Void |
| Spire.Doc.Interface.ITextBox | Spire.Doc.Interface.IBody Body { get; } | 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody |
| Spire.Doc.Pages.FixedLayoutColumn | Spire.Doc.Interface.IBody Body { get; } | 返回类型 Spire.Doc.Body → Spire.Doc.Interface.IBody |
| Spire.Doc.PermissionEnd | System.Int32 Id { get; } | 返回类型 System.String → System.Int32 |
| Spire.Doc.PermissionStart | System.Int32 Id { get; } | 返回类型 System.String → System.Int32 |
| Spire.Doc.Permission | Spire.Doc.Documents.EditingGroup EditorGroup { get; set; } | 访问器 get → get set |
| Spire.Doc.Permission | System.Int32 Id { get; } | 返回类型 System.String → System.Int32 |
| 类型 | 旧基类 | 新基类 |
|---|---|---|
| Spire.Doc.Collections.BookmarkCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.CommentsCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.DocumentObjectCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.FieldCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.FormFieldCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.ParagraphCollection | Spire.Doc.Collections.DocumentSubsetCollection | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.PermissionCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.OwnerHolder |
| Spire.Doc.Collections.ShapeItemCollection | Spire.Doc.Collections.DocumentObjectCollection | Spire.Doc.Collections.DocumentItemCollectionBase |
| Spire.Doc.Collections.TableCollection | Spire.Doc.Collections.DocumentSubsetCollection | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Collections.TextBoxCollection | Spire.Doc.Collections.DocumentItemCollectionBase | Spire.Doc.Collections.DocumentObjectCollection |
| Spire.Doc.Documents.StructureDocumentTagCell | Spire.Doc.TableCell | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Documents.StructureDocumentTagInline | Spire.Doc.Fields.ParagraphBase | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Documents.StructureDocumentTagRow | Spire.Doc.TableRow | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Fields.Comment | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Fields.InlineBody |
| Spire.Doc.Fields.Footnote | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Fields.InlineBody |
| Spire.Doc.Fields.OMath.OfficeMath | Spire.Doc.Fields.ParagraphBase | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Fields.Shapes.ShapeBase | Spire.Doc.Fields.ParagraphBase | Spire.Doc.CompositeDocumentObject |
| Spire.Doc.Fields.TableOfContent | Spire.Doc.Fields.ParagraphBase | Spire.Doc.Fields.Field |
| Spire.Doc.HeadersFooters | Spire.Doc.OwnerHolder | Spire.Doc.Collections.DocumentObjectCollection |
114 个类型的元数据发生变化。公开接口层面的主要增减:
| 接口 | 新增实现类型数 | 说明 |
|---|---|---|
| Spire.Doc.Interface.IDocCloneable | 114 | 新增实现 |
| System.Collections.Generic.IEnumerable<Spire.Doc.DocumentObject> | 37 | 新增实现 |
| Spire.Doc.Formatting.Revisions.IRevisionTracking | 35 | 新增实现 |
| Spire.Doc.Interface.ICollectionBase | 29 | 新增实现 |
| Spire.Doc.Interface.IDocumentObjectCollection | 29 | 新增实现 |
| System.Collections.IEnumerable | 24 | 新增实现 |
| Spire.Doc.Interface.IBody | 7 | 新增实现 |
| Spire.Doc.Interface.ITextRange | 3 | 新增实现 |
| Spire.Doc.Documents.ISectionCollection | 1 | 新增实现 |
| Spire.Doc.Interface.IField | 1 | 新增实现 |
| 接口 | 丢失实现类型数 | 说明 |
|---|---|---|
| Spire.Doc.Documents.IWSectionCollection | 1 | 丢失实现 |
| Spire.Doc.Interface.IDocumentObjectCollection | 1 | 丢失实现 |
| Spire.Doc.Interface.ICollectionBase | 1 | 丢失实现 |
| Spire.Doc.Interface.IBody | 1 | 丢失实现 |
其中 Spire.Doc.Interface.IDocCloneable 被 114 个类型新增实现;IRevisionTracking 被 35 个类型新增实现;IBody 新增 7 个实现(StructureDocumentTag、Comment、Footnote、DocOleObject、DocPicture、ShapeObject、TextBox),StructureDocumentTagCell 丢失 IBody;ITextRange 新增 3 个实现(Break、Symbol、TableOfContent),IField 新增 1 个实现(TableOfContent)。
非公开/混淆接口(
spr...)未计入本表;完整原始接口列表见 JSON 产物。
| 类型 | 丢失槽数 |
|---|---|
| Spire.Doc.Documents.StructureDocumentTagCell | 27 |
| Spire.Doc.Collections.ShapeItemCollection | 11 |
| Spire.Doc.Documents.StructureDocumentTagRow | 11 |
| Spire.Doc.PermissionEnd | 6 |
| Spire.Doc.PermissionStart | 6 |
| Spire.Doc.BookmarkEnd | 5 |
| Spire.Doc.BookmarkStart | 5 |
| Spire.Doc.Break | 5 |
| Spire.Doc.Collections.CellCollection | 5 |
| Spire.Doc.Collections.RowCollection | 5 |
| Spire.Doc.DocumentObject | 5 |
| Spire.Doc.Documents.CommentMark | 5 |
| Spire.Doc.Fields.CheckBoxFormField | 5 |
| Spire.Doc.Fields.ControlField | 5 |
| Spire.Doc.Fields.DropDownFormField | 5 |
| Spire.Doc.Fields.Field | 5 |
| Spire.Doc.Fields.FieldMark | 5 |
| Spire.Doc.Fields.FormField | 5 |
| Spire.Doc.Fields.IfField | 5 |
| Spire.Doc.Fields.MergeField | 5 |