NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #137 most downloaded on NuGet
The Open XML SDK provides tools for working with Office Word, Excel, and PowerPoint documents. It supports scenarios such as: - High-performance generation of word-processing documents, spreadsheets, and presentations. - Populating content in Word files from an XML data source. - Splitting up (shredding) a Word or PowerPoint file into multiple files, and combining multiple Word/PowerPoint files into a single file. - Extraction of data from Excel documents. - Searching and replacing content in Word/PowerPoint using regular expressions. - Updating cached data and embedded spreadsheets for charts in Word/PowerPoint. - Document modification, such as removing tracked revisions or removing unacceptable content from documents.
Last release 6 months ago
18 Mar 2026
Release timing varies
gaps range from 5 weeks to 10 months
Nearly every release is documented
notes for 35 of 36 stable releases
3 versions withdrawn
withdrawn after publishing
127 years old
47 releases · first in 1900
Clarified the README SDK description and simplified the note on 3.0.0 breaking changes
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
MediaDataPartType.Mp4 to support MP4 video media parts in presentations and documents (#1866)FromChunkedBase64String to significantly reduce allocations and improve throughput when decoding chunked base64 content (≈2.4× faster, ≈70% less memory) (#1868)XmlDOMTextWriter instead of XmlWriter.Create to correctly handle serialization of certain XML content (#1869, #1961)AutoSave set to false does not persist changes (#1873)Thanks to the following for their contributions:
@QuocDatHoang @Varorbc
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.WorkbookCompatibilityVersion namespace.ToFlatOpc(...) has been greatly improved for large parts (#1863)Thanks to the following for their contributions:
@QuocDatHoang
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceWordprocessingDocument.Open (#1681).Save() (#1771)AddWorkbookPart throws exception if no main part is available (#1745)Thanks to the following for their contributions:
@WeihanLi
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefresh namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioning namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeService namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculation namespaceOpenXmlUnknownElement is returned instead of CommentPropertiesExtension (#1751)OpenXmlWriter is unable to write SharedStringTablePart (#1755)OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097)model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53 @igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687)OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationOne column per quarter.
DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing.Offset classVersion attribute to DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing.ChartSpaceFeatureList attribute to DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing.ChartSpaceFalbackImg attribute to DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing.ChartSpaceDocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing.ExtensionDropMode enumClarified the README SDK description and simplified the note on 3.0.0 breaking changes
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
MediaDataPartType.Mp4 to support MP4 video media parts in presentations and documents (#1866)FromChunkedBase64String to significantly reduce allocations and improve throughput when decoding chunked base64 content (≈2.4× faster, ≈70% less memory) (#1868)XmlDOMTextWriter instead of XmlWriter.Create to correctly handle serialization of certain XML content (#1869, #1961)AutoSave set to false does not persist changes (#1873)Thanks to the following for their contributions:
@QuocDatHoang @Varorbc
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.WorkbookCompatibilityVersion namespace.ToFlatOpc(...) has been greatly improved for large parts (#1863)Thanks to the following for their contributions:
@QuocDatHoang
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceWordprocessingDocument.Open (#1681).Save() (#1771)AddWorkbookPart throws exception if no main part is available (#1745)Thanks to the following for their contributions:
@WeihanLi
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefresh namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioning namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeService namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculation namespaceOpenXmlUnknownElement is returned instead of CommentPropertiesExtension (#1751)OpenXmlWriter is unable to write SharedStringTablePart (#1755)OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097)model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687)OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationThe relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceWordprocessingDocument.Open (#1681).Save() (#1771)AddWorkbookPart throws exception if no main part is available (#1745)Thanks to the following for their contributions:
@WeihanLi
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefresh namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioning namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeService namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculation namespaceOpenXmlUnknownElement is returned instead of CommentPropertiesExtension (#1751)OpenXmlWriter is unable to write SharedStringTablePart (#1755)OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.WorkbookCompatibilityVersion namespace.ToFlatOpc(...) has been greatly improved for large parts (#1863)Thanks to the following for their contributions:
The relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceWordprocessingDocument.Open (#1681).Save() (#1771)AddWorkbookPart throws exception if no main part is available (#1745)Thanks to the following for their contributions:
@WeihanLi
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefresh namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioning namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeService namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculation namespaceOpenXmlUnknownElement is returned instead of CommentPropertiesExtension (#1751)OpenXmlWriter is unable to write SharedStringTablePart (#1755)OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationThe relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
DocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefresh namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioning namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeService namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculation namespaceOpenXmlUnknownElement is returned instead of CommentPropertiesExtension (#1751)OpenXmlWriter is unable to write SharedStringTablePart (#1755)OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationThe relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotAutoRefresh namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2024.PivotDynamicArrays namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.DataSourceVersioning namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.ExternalCodeService namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.MsForms namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2023.Pivot2023Calculation namespaceThe relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationThe relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
OpenXmlPackageException with an inner UriFormatException) (#1644)mailto:person@)OpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceIDisposableFeature is now a part of the framework package and is available by default on a package or part.OpenXmlPackage.Package to DocumentFormat.OpenXml.Packaging.IPackage instead of System.IO.Packaging.Package with a similar API surfaceEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classPartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)Model3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidSchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationThe relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
DocumentFormat.OpenXml.Office.PowerPoint.Y2023.M02.Main namespaceDocumentFormat.OpenXml.Office.PowerPoint.Y2022.M03.Main namespaceDocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespaceModel3D now represents the modified xml element tag name am3d.model3d (Previously am3d.model3D)DocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.PivotCacheHasRichValuePivotCacheRichInfoDocumentFormat.OpenXml.Office.SpreadSheetML.Y2022.PivotRichData.RichDataPivotCacheGuidOpenXmlElement (#1476)IFeatureCollection can now be enumerated and has a helpful debug view to see what features are registered (#1452)OpenXmlElementList is now a struct that implements IEnumerable<OpenXmlElement> and IReadOnlyList<OpenXmlElement> where available (#1429)OpenXmlPartReader are available now for each package type (i.e. WordprocessingDocumentPartReader, SpreadsheetDocumentPartReader, PresentationDocumentPartReader), and the previous TypedOpenXmlPartReader has been removed. (#1403)mailto:person@)SchemaAttrAttribute (#1316)ChildElementInfoAttribute (#1316)OpenXmlSimpleType.TextValue. This property was never meant to be used externally (#1316)readonly (#1282)OpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlPackage.Package property. A OpenXmlPackage is now backed by an internal (for now) type IPackage instead of System.IO.Packaging.PackageEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classIDisposableFeature is now a part of the framework package and is available by default on a package or part.PartExtensionProvider to IPartExtensionFeature and reduced its surface area to only two methods (instead of a full Dictionary<,>). The property to access this off of OpenXmlPackage has been removed, but may be accessed via Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationThe relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
mailto:person@)SchemaAttrAttributeChildElementInfoAttributeOpenXmlSimpleType.TextValue. This property was never meant to be used externallyreadonlyOpenXmlPackage.Close in favor of Dispose (#1373)OpenXmlPackage.SaveAs in favor of Clone (#1376)OpenXmlPackage.Package property. A OpenXmlPackage is now backed by an internal (for now) type IPackage instead of System.IO.Packaging.PackageEnumValue<T> now is used to box a struct rather than a System.Enum. This allows us to enable behavior on it without resorting to reflectionAddImagePart) are now implemented as extension methods off of a new marker interface ISupportedRelationship<T>ImagePartType) is no longer an enum, but a static class to expose well-known part types as structs. Now any method to define a new content-type/extension pair can be called with the new PartTypeInfo struct that will contain the necessary information.OpenXmlPackage.CanSave is now an instance property (#1307)OpenXmlSettings.RelationshipErrorHandlerFactory and associated types and replaced with a built-in mechanism to enable thisIdPartPair is now a readonly struct rather than a classIDisposableFeature is now a part of the framework package and is available by default on a package or part.Features.Get<IPartExtensionFeature>() if needed.OpenXmlPart/OpenXmlContainer/OpenXmlPackage and derived types now have internal constructors (these had internal abstract methods so most likely weren't subclassed externally)OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097).model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53
@igitur
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)CellValue may validate incorrectly for boolean values (#890)OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687).OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)OpenXmlElement is initialized with outer XML (#684, #692)FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkSystem.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.System.IO.Packaging that fixes some serious (but exceptional) bugs found in the WindowsBase implementationNothing published for this version
Nothing published for this version
Nothing published for this version
Added DocumentFormat.OpenXml.Office.Drawing.Y2022.ImageFormula namespace
OpenXmlSimpleType.TextValue as obsolete. This property was never meant to be used externally (#1284)OpenXmlPackage.Package as obsolete. This will be an implementation detail in future versions and won't be accessible (#1306)OpenXmlPackage.Close as obsolete. This will be removed in a later release, use Dispose instead (#1371)OpenXmlPackage.SaveAs as obsolete as it will be removed in a future version (#1378)Nothing published for this version
.NET 6 target with support for trimming (#1243, #1240)
Added DocumentFormat.OpenXml.Office.SpreadSheetML.Y2021.ExtLinks2021 namespace
The relationship between the PowerPointCommentPart and the PresentationPart is deprecated and will be removed in a future version.
Added method OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded
OpenXmlPart.UnloadRootElement that will unload the root element if it is loaded (#1126)Thanks to the following for their contribution:
@f1nzer
Added samples for strongly typed classes and Linq-to-XML in the ./samples directory (#1101, #1087)
./samples directory (#1101, #1087)DocumentFormat.OpenXml.Features and DocumentFormat.OpenXml.Linq. See documentation in repo for additional details.FileFormatVersions.Microsoft365 for new subscription model types and constraints (#1097)model/gltf.binary (#1069)new CellValue(bool) values (#1070)FileFormatVersions enumThanks to the following for their contributions:
@ThomasBarnekow @stevenhansen @JaimeStill @jnyrup
Added generated classes for Office 2021 types and constraints
Features property to OpenXmlPartContainer and OpenXmlElement to enable a per-part or per-document state storageXmlPath (#1013)Thanks to the following for their contributions:
@rmboggs @ThomasBarnekow
Nothing published for this version
Fixed some nullability annotations that were incorrectly defined (#953, #955)
TextReader when creating an XmlReader under certain circumstances (#940)Thanks to the following for their contributions:
@ThomasBarnekow @sorensenmatias @lklein53 @lindexi
Deprecated Office2013.Word.Person.Contact property. It no longer persists and will be removed in a future version
OpenXmlPartReader and OpenXmlReader.Create(...) to ignore whitespace (#857)HexBinaryValue.TryGetBytes(...) and HexBinaryValue.Create(byte[]) to manage the encoding and decoding of bytes (#867)IEquatable<IdPartPair> on IdPartPair to fix equality implementation there and obsoleted setters (#871)CellValue constructors to use invariant cultures (#903)UniqueAttributeValueConstraint is involved (#924)Thanks to the following for their contributions:
@lklein53 @igitur
Nothing published for this version
Nothing published for this version
Fixed issue where CellValue may validate incorrectly for boolean values
CellValue may validate incorrectly for boolean values (#890)Fixed issue where OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input
OpenSettings.RelationshipErrorHandlerFactory creates invalid XML if the resulting URI is smaller than the input (#883)Fixed bug where properties on OpenXmlCompositeElement instances could not be set to null to remove element
OpenXmlCompositeElement instances could not be set to null to remove element (#850)OpenXmlElement.RawOuterXml to properly set null values without throwing (#818)Added OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links
OpenSettings.RelationshipErrorHandlerFactory to provide a way to handle URIs that break parsing documents with malformed links (#793)OpenXmlCompositeElement.AddChild(OpenXmlElement) to add children in the correct order per schema (#774)SmartTagClean and SmartTagId in place of SmtClean and SmtId (#747)OpenXmlValidator.Validate(..., CancellationToken) overrides to allow easier cancellation of long running validation on .NET 4.0+ (#773)CellValue to take decimal, double, and int, as well as convenience methods to parse them (#782)CellType for numbers and date formats (#782)OpenXmlReader.GetLineInfo() to retrieve IXmlLineInfo of the underlying reader if available (#804)SchemaAttrAttribute attributes back for backwards compatibility (#825)System.IO.Packaging on .NET 4.6 builds (#774)Fixed massive performance bottleneck when IndexReferenceConstraint and ReferenceExistConstraint are involved
IndexReferenceConstraint and ReferenceExistConstraint are involved (#763)CellValue to only include three most signficant digits on second fractions to correct issue loading dates (#741)Ensured compilation is deterministic
Ensure .NET Framework builds pass PEVerify
OpenXmlPartContainer.DeletePart no longer throws an exception if there isn't a match for the identifier given (#740)AttributeRequiredConditionToValue semantic constraint where validation could fail on correct input (#746)Added FileFormatVersions.2019 enum
FileFormatVersions.2019 enum (#695)ChartSpace and chart elements for the new 2016 namespaces. This allows the connecting pieces for building a chart part with chart styles like "Sunburst" (#687)OpenXmlElementFunctionalExtensions.With(...) extension methods, which offer flexible means for constructing OpenXmlElement instances in the context of pure functional transformations (#679)CompatSettingNameValues values: UseWord2013TrackBottomHyphenation, AllowHyphenationAtTrackBottom, and AllowTextAfterFloatingTableBreak (#706)OpenXmlPartContainer.TryGetPartById to enable child part retrieval without exception if it does not exist (#714)OpenXmlPackage.StrictRelationshipFound property that indicates whether this package contains Transitional relationships converted from Strict (#716)OpenXmlAttribute as obsolete as structs should not have mutable state (#698)Nothing published for this version
Ensured attributes are available when OpenXmlElement is initialized with outer XML (#684, #692)
OpenXmlElement is initialized with outer XML (#684, #692)Added initial Office 2016 support, including FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements
FileFormatVersion.Office2016, ExtendedChartPart and other new schema elements (#586)IXmlNamespaceResolver from XmlPath instead of formatted list of strings to expose namespace/prefix mapping (#536)IComparable<T> and IEquatable<T> on OpenXmlComparableSimpleValue to allow comparisons without boxing (#550)OpenXmlPackage.RootPart to easily access the root part on any package (#661)ToFlatOpcDocument, ToFlatOpcString, FromFlatOpcDocument, and FromFlatOpcString to correctly process Alternative Format Import Parts, or "altChunk parts" (#659)Nothing published for this version
Nothing published for this version
Added a workaround for a .NET Native compiler issue that doesn't support calling Marshal.SizeOf with a struct that contains auto-implemented propertie
Marshal.SizeOf<T> with a struct that contains auto-implemented properties (#569)ListValue now implements IEnumerable
ListValue now implements IEnumerable<T> (#385)WebExtension.Frozen and obsoleted misspelled Fronzen property (#460)OpenXmlPackage.CanSave property that indicates whether a platform supports saving without closing the package (#468)EnumValue and ListValue) now implement IComparable<T> and IEquatable<T> (#487)EnumSimpleType parsing was improved and uses less allocations and caches for future use (#408)OpenXmlPackage.Save on .NET Framework, the package is now flushed to the stream (#468)System.IO.Packaging to 4.5.0 which fixes some issues on Xamarin platforms as well as minimizes dependencies on .NET FrameworkCorrected package license file reference to show updated MIT License
Default runtime directive for better .NET Native support.
System.IO.Packaging version 4.4.0 which fixes some consistency with .NET Framework in opening packages.Package now supports .NET 3.5 and .NET 4.0 in addition to .NET Standard 1.3 and .NET Framework 4.6
Fixed crash when validation is invoked on .NET Framework with strong-naming enforced.
Nothing published for this version
Rewrite "Ignoring Deprecations" sub-section to clarify the ideal scenario.
Your coding agent can read these notes before it upgrades. Set up the MCP server →