# Breaking Changes

> Code, package and behavior changes to check when upgrading TX Text Control .NET Server from 30.0 to 34.0: Core engine, backend port 4283 and licenses.licx.

- **Product:** TX Text Control .NET Server
- **Section:** Documentation
- **Kind:** Topic
- **Path:** TX Text Control .NET Server > Installation Guide > Upgrade Guide > Breaking Changes
- **4279 words**
- **Web URL:** https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/breaking-changes/
- **LLMs URL:** https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/breaking-changes/llms.txt
- **LLMs-Full URL:** https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/breaking-changes/llms-full.txt

---

Upgrading TX Text Control .NET Server to a new major version can require changes to code, project settings or packages. Listed per version, these changes let you estimate the work involved before you start.

For the new features of each version, see [What's New](https://docs.textcontrol.com/tx-text-control-dotnet-server/whats-new/llms-full.txt). The What's New section also has a [Breaking Changes](https://docs.textcontrol.com/tx-text-control-dotnet-server/whats-new/breaking-changes/llms-full.txt) page.

### How to Use This List

- Read the entries of every version between your current version and your target version, not only those of the target version. An upgrade from 32.0 to 34.0 includes the changes of 33.0.
- Each version starts with its **Update Notes**, the table of changes to existing classes, properties, methods and events from the What's New documentation of that version. The other entries describe changes to packages, project setup, the Document Editor backend and the frontend packages that Text Control announced for the version.
- Some changes arrived with a service pack or a web package version. They are listed under the major version they belong to.
- Once your code compiles, test the application. The entries under "Behavior Changes to Test" don't break the build, but they can change what your application produces.

### Version 34.0

TX Text Control 34.0 was released in November 2025.

#### Update Notes

The Update Notes table of version 34.0 has a single empty row, so no changes to existing classes, properties, methods or events are listed. Some renderings of the table show the [AppendSettings](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/appendsettings/enumeration/llms-full.txt) enumeration without a description in that row. It isn't a change: `AppendSettings` and its values `None`, `StartWithNewParagraph` and `StartWithNewSection` have existed since the `Append` methods were introduced in version 14.0.

#### .NET Versions

The 34.0 packages support .NET 8, .NET 9 and .NET 10. A project that already uses the 33.0 NuGet packages doesn't need a new target framework. Text Control tested 34.0 with .NET 10 and found that existing TX Text Control APIs work without code changes.

#### Packages

- **Text Control Private NuGet Feed.** Since February 2026, licensed developers can install the packages from the private feed at `https://www.textcontrol.com/nuget/v3/index.json`. The license is injected into the package on the server before the download. The Text Control Offline Packages source of the developer installation remains available. See [Migrating from Previous Versions](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/previous-versions/llms-full.txt) to switch.
- **Document Editor backend package.** The package `TXTextControl.Web.DocumentEditor.Backend` (versions 34.1.0 to 34.5.0 on the private feed) contains the backend worker `TXTextControl.Web.Server.Core` and the hosted service `DocumentEditorWorkerManager` that starts and stops it. It copies the worker files to the build and publish output, so you no longer add these files to your project manually. The package depends on the Core engine: install `TXTextControl.TextControl.Core.SDK` as well. Applications built with the 33.0 tutorials can replace their own hosted service with this package, as described in [Migrating from Previous Versions](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/previous-versions/llms-full.txt).
- **Two Document Viewer packages.** The 34.x package set contains `TXTextControl.Web.DocumentViewer` and `TXTextControl.Web.DocumentViewer.Classic` (first version 34.0.0). Their READMEs list the matching assemblies as dependencies: `TXTextControl.Core.dll`, `TXTextControl.Server.Core.dll` and `TXDocumentServer.Core.dll` for the Document Viewer package, and `TXTextControl.dll`, `TXTextControl.Server.dll` and `TXDocumentServer.dll` for the Classic package. Choose the viewer package that matches the SDK package of your project.

#### Frontend Packages

- `@txtextcontrol/tx-react-document-editor` 34.0.0 requires React `^19.2.0` as a peer dependency.
- `@txtextcontrol/tx-ng-document-editor` 34.0.0 requires Angular `>=18.2.14 <=21`.

See [Updating npm Packages](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/npm/llms-full.txt) for the complete list.

#### Behavior Changes to Test

- **Document Editor on the Core engine.** All built-in dialog boxes are now available in the Linux-based Document Editor. Its ribbons and context menus have been changed and now have the same functionality as the Windows-based Document Editor. If you customize the ribbon or the context menus, test your customizations.
- **PDF output.** PDF documents exported with 34.0 include the tags and metadata for PDF/UA compliance by default, and documents saved as PDF/A are saved as PDF/A-3a. If you compare or validate the PDF documents your application creates, check the results.
- **RTF and EMF on the Core engine.** The Core engine now loads and saves RTF documents and supports EMF images, on Linux and Windows. Before 34.0, these capabilities were only available in the Windows-only Classic engine.
- **Document Editor backend port.** In 34.x, `TXTextControl.Web.Server.Core` listens on TCP port 4283 by default, and `UseTXWebSocketMiddleware()` without parameters connects to that port; in 33.0, both used port 4282. The parameterless setup keeps working because both defaults changed together. If your 33.0 application names port 4282 explicitly, for example for a backend that runs separately, in a container or behind a firewall rule, change it to 4283 or configure the same port on both sides.

### Version 33.0

TX Text Control 33.0 was released in March 2025. It introduced Linux support.

#### Update Notes

| Class/property/method/event | Update note |
|---|---|
| `Barcode.TXBarcodeControl.Load` method | Both overloads of the method with `Barcode.SerializationFormat` as parameter have been removed. |
| `WPF.Barcode.TXBarcodeControl.Load` method | Both overloads of the method with `Barcode.SerializationFormat` as parameter have been removed. |
| `Barcode.TXBarcodeControl.Save` method | Both overloads of the method with `Barcode.SerializationFormat` as parameter have been removed. |
| `WPF.Barcode.TXBarcodeControl.Save` method | Both overloads of the method with `Barcode.SerializationFormat` as parameter have been removed. |

The `TXBarcodeControl` classes are documented for the Windows Forms and WPF products, and the API reference of TX Text Control .NET Server does not contain them. These entries matter if you share code with a Windows Forms or WPF application.

#### Two Engines and New NuGet Packages

Version 33.0 split TX Text Control .NET Server into two engines, each with its own NuGet package:

| Package | Engine | Operating systems |
|---|---|---|
| `TXTextControl.TextControl.ASP.SDK` | Classic, the original engine | Windows |
| `TXTextControl.TextControl.Core.SDK` | Core, new in 33.0 | Windows and Linux |

What this means for an upgrade:

- **.NET 8 or higher.** The assemblies of both packages are compiled for .NET 8 and support .NET 8 and higher. The NuGet packages of 32.0 Service Pack 2 were .NET 6 libraries, so projects that target .NET 6 or .NET 7 must change their target framework to .NET 8 or higher. Text Control continues to provide .NET Framework assemblies for .NET Framework 4.8.
- **Existing Windows applications** can keep `TXTextControl.TextControl.ASP.SDK`.
- **Applications that you migrate to .NET 8 or higher, and new applications,** should use `TXTextControl.TextControl.Core.SDK`, as recommended by Text Control. The Core engine uses its own SVG-based rendering and a *Fonts* folder that is deployed with the application instead of the system fonts, and it does not load or save the legacy Word binary format (DOC). See "From Classic to Core" in [Migrating from Previous Versions](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/previous-versions/llms-full.txt).
- **Linux and Linux containers** require the Core engine.
- The Document Editor and Document Viewer NuGet packages of 33.0 work with both engines and are installed as in the previous version.

#### Document Editor Backend

In 32.0 and earlier, the synchronization service of the Document Editor was only available as a Windows service. In ASP.NET Core applications, version 33.0 replaced it with `TXTextControl.Web.Server.Core`, a .NET 8 application that runs on Windows and Linux. By default, it listens on TCP port 4282. ASP.NET applications on the .NET Framework still deploy the TX TextControl Service, also in 34.0.

The 33.0 tutorials add the backend to an ASP.NET Core application in two steps: they copy the `TXTextControl.Web.Server.Core` files from the installation folder into the project with **Copy to Output Directory** set to **Copy always**, and they add a hosted service class `TXWebServerProcess` that starts `TXTextControl.Web.Server.Core.dll`. In 34.x, the `TXTextControl.Web.DocumentEditor.Backend` package replaces both steps.

If you change the port in *TXTextControl.Web.Server.Core.config.json*, pass the same address and port to the middleware:

```csharp
app.UseTXWebSocketMiddleware("localhost", 34567);
```

#### Frontend Packages

- `@txtextcontrol/tx-react-document-editor` 33.0.0 changed its peer dependency from React `^18.2.0` to React `^19.0.0`. Upgrade React applications to React 19 before you install the 33.0 or 34.0 Document Editor.
- `@txtextcontrol/tx-ng-document-editor` 33.0.0 requires Angular `>=17.3.12 <=19`.

### Version 32.0

TX Text Control 32.0 was released in September 2023.

#### Update Notes

| Class/property/method/event | Update note |
|---|---|
| [Page.GetImage](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/page/getimage-method/llms-full.txt) method | A new overload returns a string in Scalable Vector Graphics (.SVG) format. |
| [ServerVisualization.View.GetImage](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-servervisualization/view/getimage-method/llms-full.txt) method | A new overload returns a string in Scalable Vector Graphics (.SVG) format. |

Both entries add new overloads, so existing code does not need to change.

#### Document Editor Middleware in ASP.NET Core

ASP.NET Core applications that use the Document Editor must change *Program.cs* when they upgrade to 32.0. Find the following line:

```csharp
// attach the Text Control WebSocketHandler middleware
app.UseMiddleware<TXTextControl.Web.WebSocketMiddleware>();
```

Replace it with this line:

```csharp
app.UseTXWebSocketMiddleware();
```

At the very top of *Program.cs*, add the namespace of the extension method:

```csharp
using TXTextControl.Web;
```

#### Document Editor TCP Service

The TCP synchronization service of a new major version listens on a different TCP port than the service of the previous version. You can install the 32.0 service next to the running 31.0 service and switch your applications over.

#### Service Pack 2: Licensing Without licenses.licx

Service Pack 2 changed the licensing of .NET applications (.NET 6 and higher): TX Text Control no longer uses the .NET license compiler (lc.exe), and updating the NuGet packages replaces *licenses.licx* with the license file *txtextcontrol.server.license*, which is compiled into your assembly. Existing licenses continue to work, and applications based on the .NET Framework keep using *licenses.licx*. A class library that contains the license now sets the static [EntryAssembly](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/entryassembly-property/llms-full.txt) property to be called from assemblies without a license. [License File Changes](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/previous-versions/#license-file-changes) describes what to do for each kind of project, and [Class Libraries and Unit Tests](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/licensing/development/#class-libraries-and-unit-tests) shows the code.

#### Document Viewer 32.2.1: PDF.js 4.0

The Document Viewer 32.2.1 supports PDF.js 4.0 and later. When you update PDF.js to version 4.0 or later, replace the `DocumentLoadSettings.PDFJS.BasePath` property with the two properties [LibrarySourcePath](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-web-mvc-documentviewer/pdfjssettings/librarysourcepath-property/llms-full.txt) and [WorkerSourcePath](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-web-mvc-documentviewer/pdfjssettings/workersourcepath-property/llms-full.txt). This is the old code in an ASP.NET Core view:

```cshtml
@Html.TXTextControl().DocumentViewer(settings => {
  settings.DocumentLoadSettings.PDFJS.BasePath = "/Scripts/pdf.js/";
}).Render()
```

This is the new code:

```cshtml
@Html.TXTextControl().DocumentViewer(settings => {
  settings.DocumentLoadSettings.PDFJS.LibrarySourcePath = "/Scripts/pdf.js/pdf.min.mjs";
  settings.DocumentLoadSettings.PDFJS.WorkerSourcePath = "/Scripts/pdf.js/pdf.worker.min.mjs";
}).Render()
```

In Angular, set the `pdfjs` object of `documentLoadSettings`:

```html
<tx-document-viewer
   width="800px"
   height="800px"
   basePath="YOUR_BACKEND_URL"
   [documentLoadSettings] = "{
    pdfjs: {
      workerSourcePath: 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.0.379/pdf.worker.min.mjs',
      librarySourcePath: 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.0.379/pdf.min.mjs'
    }}">
</tx-document-viewer>
```

In React, pass the same settings to the `documentLoadSettings` property:

```jsx
<DocumentViewer
  width="1000px"
  height="800px"
  basePath="YOUR_BACKEND_URL"
  documentLoadSettings={{ pdfjs : {
    workerSourcePath : "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.0.379/pdf.worker.min.mjs",
    librarySourcePath: "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/4.0.379/pdf.min.mjs"}}}
  >
</DocumentViewer>
```

### Version 31.0

TX Text Control 31.0 was released in September 2022. Its What's New documentation lists no Update Notes.

Version 31.0 supports .NET 5, .NET 6 and .NET 7 (Preview), including NuGet packages for ASP.NET. After the installation, the setup adds the new package source "Text Control Offline Packages", which contains the NuGet packages for the Text Control components. The packages configure references and licenses automatically. Projects that use assembly references can move to these packages, as described in [Migrating from Previous Versions](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/previous-versions/llms-full.txt).

### Version 30.0

TX Text Control 30.0 was released in November 2021.

#### Update Notes

| Class/property/method/event | Update note |
|---|---|
| [LoadSettings.PDFImportSettings](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/loadsettings/pdfimportsettings-property/llms-full.txt) property | Has been extended with the `LoadEmbeddedFiles`, `LoadMetadata` and the `GenerateXMLAsEmbeddedFile` setting. |

The entry extends an existing property, so existing code does not need to change. The Update Notes of version 29.0 contain the same entry, and version 29.0 introduced the embedded files and the metadata of PDF documents, so the settings were already available before 30.0. The current [PDFImportSettings](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/pdfimportsettings/enumeration/llms-full.txt) enumeration has no `LoadMetadata` or `GenerateXMLAsEmbeddedFile` value: `LoadEmbeddedData` provides the metadata, form fields and text coordinates of a PDF document through [LoadSettings.EmbeddedData](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/loadsettings/embeddeddata-property/llms-full.txt).

#### Assemblies No Longer Registered in the GAC

Since 30.0, TX Text Control supports several .NET versions, including .NET Framework 4.8, .NET 5 and .NET 6. For that reason, the setup no longer registers the assemblies in the global assembly cache (GAC). This affects applications that use *licenses.licx*:

- Every entry in *licenses.licx* must contain the full version number of the assembly. Before 30.0, entries without a version number were possible. Without the version number, an older TX Text Control version found in the GAC can be used, which leads to a licensing error.
- If you build license files manually with lc.exe, for example on a build server, pass the full path of each assembly with the `/i` option. Otherwise, an older version from the GAC might be used.

An entry for `ServerTextControl` in version 30.0 looks like this: `TXTextControl.ServerTextControl, TXTextControl.Server, Version=30.0.1500.500, Culture=neutral, PublicKeyToken=6b83fe9a75cfb638`. Use the version number of the assemblies your project references.

### Versions Before 30.0

The entries above start at version 30.0. If your application uses an older version, read the Update Notes of every version in between as well. Two of them change existing API in a way that can break the build:

- **24.0.** The handler of the [ServerVisualization.View.Changed](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-servervisualization/view/changed-event/llms-full.txt) event is a `ViewChangedEventHandler` instead of a `System.EventHandler`, and it receives a [ViewChangedEventArgs](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-servervisualization/viewchangedeventargs/llms-full.txt) argument.
- **28.0.** [DocumentTarget](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/documenttarget/llms-full.txt) no longer derives from [TextField](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/textfield/llms-full.txt), so inherited members that had no meaning for a target, such as `Text` and `Editable`, are gone, and the value `TextFieldType.DocumentTarget` has been removed.

[Older Versions](https://docs.textcontrol.com/tx-text-control-dotnet-server/whats-new/older-versions/llms-full.txt) in What's New describes the versions before 30.0.

### Next Steps

- [Migrating from Previous Versions](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/previous-versions/llms-full.txt): step-by-step paths for typical upgrades.
- [Updating NuGet Packages](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/nuget/llms-full.txt): update the packages after you have planned the changes.
- [Updating npm Packages](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/npm/llms-full.txt): peer dependencies of the Angular and React packages.
- [What's New in Version 34.0](https://docs.textcontrol.com/tx-text-control-dotnet-server/whats-new/3400/llms-full.txt): the new features of the current version.

---

## Nearby

- **Previous:** [Updating npm Packages](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/npm/llms-full.txt)
- **Next:** [Migrating From Previous Versions](https://docs.textcontrol.com/tx-text-control-dotnet-server/installation/upgrading/previous-versions/llms-full.txt)
