Installation

Requirements

Requirement Value
.NET .NET 10 (net10.0). The packages do not multi-target older frameworks.
Operating system Any that .NET 10 supports. Pure managed packages need nothing else.
Native libraries Only for the packages and options listed in Native dependencies.

The all-in-one package

X-Ray contains no code. It depends on every member of the family, so one reference brings in all of them:

dotnet add package X-Ray

Each X-Ray release depends on the newest version of every member that was published when it was built. A member that has not been published yet is not a dependency; the first X-Ray release after it ships adds it.

Individual packages

Install only the members you use:

dotnet add package X-Ray.Content    # content extraction
dotnet add package X-Ray.Office     # Word, Excel, PowerPoint: read and render to PDF/images
dotnet add package X-Ray.Psd        # Photoshop PSD/PSB
dotnet add package X-Ray.Psd.Skia   # optional: SkiaSharp interop for X-Ray.Psd
dotnet add package X-Ray.Psd.Text   # optional: re-render PSD type layers
dotnet add package X-Ray.Email      # MSG, EML, CFB
dotnet add package X-Ray.Ics        # iCalendar and vCalendar: events, recurrence, writing
dotnet add package X-Ray.PS         # PostScript, EPS, XPS
dotnet add package X-Ray.PS.Skia    # optional: SkiaSharp raster output for X-Ray.PS
dotnet add package X-Ray.OneNote    # OneNote .one

Nothing is lost by referencing a member directly. Two reasons to prefer it:

  • Your dependency graph holds only what you use. X-Ray.Office, for example, brings SkiaSharp and HarfBuzzSharp for rendering; a service that only extracts text does not need them.
  • A new family member cannot arrive in your build without you asking for it.

You can also mix the two: reference X-Ray, and add a direct reference to one member at a newer version than X-Ray pins. NuGet resolves the higher version.

Package ids and namespaces

Package ids are hyphenated; assemblies and namespaces are not, because a hyphen is not valid in a C# identifier:

Package id Namespace
X-Ray.Content XRay.Content
X-Ray.Office XRay.Office
X-Ray.Psd, X-Ray.Psd.Skia, X-Ray.Psd.Text XRay.Psd, XRay.Psd.Skia, XRay.Psd.Text
X-Ray.Email XRay.Email
X-Ray.Ics XRay.Ics
X-Ray.PS, X-Ray.PS.Skia XRay.PS, XRay.PS.Skia
X-Ray.OneNote XRay.OneNote

Native dependencies

The core of every package is managed code. Native code enters only here:

Package or option Native dependency Why
X-Ray.Content with OCR enabled (OcrOptions.Mode other than Disabled) SkiaSharp, PDFium Image decoding and rasterising scanned PDF pages. Off by default; not loaded unless enabled.
X-Ray.Office rendering SkiaSharp, HarfBuzzSharp Rasterising pages and shaping text the way LibreOffice does.
X-Ray.Psd.Skia SkiaSharp SKBitmap/SKImage interop and Skia's encoders.
X-Ray.Psd.Text SkiaSharp, HarfBuzzSharp Drawing type layers from their text.
X-Ray.PS.Skia SkiaSharp Skia raster output for PostScript, EPS and XPS pages.

X-Ray.Psd, X-Ray.Email, X-Ray.Ics, X-Ray.PS and X-Ray.OneNote have no dependencies outside the .NET base class library.

Versions

Versions are CalVer: yy.M.<build>, for example 26.9.5114. Every package is published by its own pipeline, so members' versions differ from each other and from X-Ray's. There are no prerelease suffixes; a higher version is a newer build.

Licenses

Package License
X-Ray.Content MIT AND Apache-2.0 (a few files derive from Apache-2.0-only Rust crates)
X-Ray.Office MPL-2.0 (derived from LibreOffice)
X-Ray.Psd, X-Ray.Psd.Skia, X-Ray.Psd.Text, X-Ray.Email, X-Ray.Ics, X-Ray.PS.Skia, X-Ray.OneNote MIT
X-Ray.PS MIT AND OFL-1.1 (it bundles Liberation Serif under OFL-1.1 and DjVu Dingbats under the Bitstream Vera licence)
X-Ray (all-in-one) MIT AND Apache-2.0 AND MPL-2.0 AND OFL-1.1, covering what it installs