TrinityText.ServiceBus.MassTransit
1.4.80-beta
This is a prerelease version of TrinityText.ServiceBus.MassTransit.
dotnet add package TrinityText.ServiceBus.MassTransit --version 1.4.80-beta
NuGet\Install-Package TrinityText.ServiceBus.MassTransit -Version 1.4.80-beta
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TrinityText.ServiceBus.MassTransit" Version="1.4.80-beta" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="TrinityText.ServiceBus.MassTransit" Version="1.4.80-beta" />
<PackageReference Include="TrinityText.ServiceBus.MassTransit" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add TrinityText.ServiceBus.MassTransit --version 1.4.80-beta
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: TrinityText.ServiceBus.MassTransit, 1.4.80-beta"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package TrinityText.ServiceBus.MassTransit@1.4.80-beta
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=TrinityText.ServiceBus.MassTransit&version=1.4.80-beta&prerelease
#tool nuget:?package=TrinityText.ServiceBus.MassTransit&version=1.4.80-beta&prerelease
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#2026-10-01
- Security: AutoMapper 14 (GHSA-rvv3-g6hj-g44x, DoS via uncontrolled recursion; fixes only in the commercial 15.x/16.x) replaced by Riok.Mapperly 4.3 (Apache-2.0, source generator: no reflection, no runtime graph walking).
BusinessMapperProfile→ internalBusinessMapper; services no longer takeIMapper(hosts must removeAddAutoMapper(BusinessMapperProfile)). Unmapped DTO/entity members now break the build (RMG012) - Refactor: version 1.4.0 (public API: services lose the
IMapperconstructor parameter); mapping behavior is unchanged - Tests:
BusinessMapperTestsfor every custom mapping rule
#2026-09-30
- License: rollback to Automapper 14.0.0
#2026-09-29
- Security:
TextType.Namevalidated withPathSafety(used as export file name); export file paths canonicalised and confined to the export root (PathSafety.EnsureWithinRoot) - Security: widget expansion capped at 5 MB total (nested widgets could grow exponentially)
- Security: tenant / website / file names validated in
TransferServicebefore FTP/SFTP navigation; publication payload website must match the publication website (Generate/Publish) - Security: removed hard-coded
[TRINITY]database name from raw SQL inPublicationService;UpdateZipContentfailures are now propagated - Security:
IPublicationService.GetAllaccepts an optionalwebsitesfilter (null keeps previous behavior) - Security: widget content and placeholder values are CDATA-safe (
]]>can no longer close the section and inject markup into published pages) - Security: XML schemas/contents parsed with DTD processing prohibited (
SafeXml) - Security: file names validated with
PathSafety; system folder names (site / language) validated inCreateFolderByName - Security:
SaveFolderrejects missing / cross-website parents and cycles;GetFileLinkis loop-safe - Security: images declaring more than
MaxPixels(default 50 MP) are not decoded; null codec handled - Security: HTML-encoded values in publish/generate notification mails; null-safe FTP server name
- Performance:
GetFileIdByFullname(id only, noCONTENT) used for link resolution; newWidgetResolutionCachememoizes widget and link lookups across the pages of an export (new overloads onIWidgetUtilities) - Performance:
DeleteFilevia set-based delete andGetFileLinkvia metadata projection (no blob loading) - New:
ExecuteUpdateAsynconIRepository<T>(set-based UPDATE of selected columns; EF Core + NHibernate implementations,UpdateSetters<T>) - Performance:
RenameFileandMoveFileupdate the row in place (no blob load/rewrite); a moved file keeps its id (before: new row + delete) - Performance: file export loads one blob at a time (
IFileManagerService.GetFileContent) instead of the whole folder; export paths confined to the export root - Performance: publication ZIP streamed from disk to SQL (
IPublicationService.UpdateWithZipStream, VarBinary(max)); publication status updated with a targeted UPDATE (no entity graph rewrite) - Performance: publishable pages loaded without repeating the PageType schema XML on every row (page types loaded once)
- Performance:
ImportTextsinserts new texts in a single batch (AddRangeAsync); Excel import resolves text types via dictionary - Performance: multi-sheet Excel export in memory (no temp file)
- Performance: remaining synchronous reads (
GetAll*,NotDuplicated, folder/file lookups) are now async;PublicationService.GetAllno longer reads FTP credentials (newIRepository<FtpServer>constructor dependency, resolved by DI) - Performance: FTP transfers use FluentFTP
AsyncFtpClient - Performance: thumbnails decoded directly at reduced size (
SKCodec.GetScaledDimensions) with linear sampling; one codec per image operation (size limit, animation check and decode share it) - Performance:
GetPublishableTextsByWebsitegroups global texts by language once (ToLookup,Concatinstead ofUnion);GetPublishableTextsskips the redundant SQL ORDER BY - Performance:
CleanRevisionsis a single set-based DELETE (no id list materialised) - Performance: default site / language folder creation reads the parent's children once
- Performance:
WidgetService.GetByKeysis async; owner/website filters usecol == null || col == ""instead ofIsNullOrWhiteSpace(index friendly) - New:
Core/TrinityText.Domain/Db/indexes.sqlwith recommended non-clustered indexes (run manually on the database) - CI:
releases.ymlruns only onpublished(before:published/edited/releasedproduced several packages per release), least-privilegepermissions,concurrency, timeouts, API key viaenv,environment: nuget, offline tests before publishing, single build +pack --no-build;builds.ymlalso on pull requests, runs the offline tests and reports vulnerable packages; newdependabot.ymlandcodeql.yml - Packaging: symbol packages (
snupkg), SourceLink, deterministic CI builds, MIT license acceptance not required;SkiaSharp.NativeAssets.Linux.NoDependenciesadded so image processing works on Linux - Fix: publish failure keeps the publication and its ZIP (status
Failed) instead of deleting them;Generate/Publishconsumers are idempotent (completed publications are skipped, aPublishingone only re-sends the publish message); mails only when an address is set and never with line breaks in the subject - Fix: a missing/corrupt ZIP or a failed compression is an error (before: empty upload reported as success, empty path returned); partial ZIP and export folder are removed on failure
- Fix: export failures (folders/files/content not readable) abort the publication instead of producing an incomplete one; export paths use
Path.Combine(Linux-safe) and are confined to the export root; site / language codes of the payload are validated; invalid XML characters removed from exported texts; emptyOutputFilenamefalls back to the page type name; page errors report the page id and title - Fix:
CleanRevisionsrejects a limit lower than 1 (deleted every revision) and counts byREVISION_NUMBER - Fix: text selection no longer throws (
Single) or silently drops texts when the same key exists at several levels - Fix: null and empty website/site/country are equivalent in duplicate checks and publish queries; text names upper-cased with the invariant culture (also on update); updating a text adds a revision even when none was loaded and never reuses the id of an existing revision;
TextDTO→Textno longer maps the nestedTextType - Fix:
RemoveFolderdeletes files and subfolders (foreign keys do not cascade);SaveFolderrefuses to edit system folders, keeps the website and rejects duplicate sibling names;AddFilerequires the folder to belong to the website; file links are unescaped when resolved;GetAllFolderssetsDeletable;PasteFile/MoveFileerror codes were swapped; moving a file into its own folder is a no-op - Fix: optional Number/DateTime page atoms can be empty; invariant culture in the page schema
- Fix:
Begin/Commit/RollbackTransactionnest (EF: an inner Begin used to roll back the outer transaction); CDN update is transactional and uses targeted UPDATEs; widget update checks duplicates;PublicationService.Createreturns FTP/CDN,Getaccepts a publication without payload - Fix: SFTP
GetFileno longer returns a null Task, clients are disposed, files opened read-only, port honored; remote directory taken from the URL path (no moreuser:password@/ port as folder names); AWS translator reuses one client and reports errors instead of returning an empty translation; Excel import fails on unreadable files, collapses repeated rows, blank scope cells are null; widget lookup errors are no longer published as the widget key; thumbnail options validated - Tests:
[TestCategory("Offline")]tests (no database) for PathSafety, WidgetUtilities, text selection, atoms, mapping, ZIP, transfer and the publish/generate consumers (MassTransit test harness) - Fix (NHibernate):
Createreturned the identifier cast to the entity (InvalidCastException) andReadpassed the id array toGetAsync;Create/Update/Deletewere never flushed outside a transaction; the mapping lackedFtpServer.PASSWORD,Publication.EMAIL/PAYLOAD/FK_FTPSERVER/FK_CDNSERVER,WebsiteConfiguration.URL/NOTE;Text.TEXTTYPEwas mandatory; new revisions and CDN join rows were not persisted (cascade); many-to-oneDeleteOrphanscould delete the referenced entity; foreign keys to existing rows are now written from the scalar column (like EF Core) and the join tables use scalar composite keys - Fix:
ExecuteDeleteAsync/ExecuteUpdateAsyncignore auto-includes (EF Core threwArgumentOutOfRangeExceptiononFtpServerPerCdnServer, breaking the CDN update); untyped texts were never published with NHibernate (IN (.., NULL)); duplicate check and import compare upper-cased names; CDN creation inserts the join rows after the server - Security:
PathSafetyalso rejects control characters, Windows device names (CON, NUL, COM1, ...), trailing dots and names longer than 255 - Security: widget token regex bounded (no quadratic scan on unclosed
@[WIDGET() with a timeout, input size limit; nested widgets are expanded first and the]]>protection is applied once to the whole expansion (a widget ending with]nesting one starting with]>could close the CDATA) - Security:
FileUploadPolicyblocks server-side scripts, executables and web server configuration files (AddFile,RenameFile); CDN base URL must be http(s); FTP/SFTP address must beftp:///sftp://without credentials; the transfer accepts only those schemes - Security: Excel import refuses rows of websites the caller cannot manage (
allowedWebsitesonIExcelService.GetTextsFromStreamandITextService.ImportTexts), invalid site/language names and sheets over 50,000 rows - Security: pages must be well-formed XML (no DTD, at most 200 levels, 5 M characters) to be saved; widgets are limited to 1 M characters;
SafeXmllimits characters and depth (the JSON conversion is recursive);GetPagecaps the page size (1000) and cannot overflow - Security: vulnerable transitive packages pinned (
System.Text.Json8.0.5,System.Security.Cryptography.Xml10.0.12,System.Net.Http/X509Certificatesfor NHibernate); the CI check of vulnerable packages now fails the build - Tests: SQLite in-memory fixture running the repository and service tests on EF Core and NHibernate, EF/NH/script parity tests, hardening tests
- Performance:
TextType.TEXTTYPEPERWEBSITESis no longer auto-included (every text row was multiplied by the number of websites of its type) - Performance: latest-revision loading and text import query in chunks of 1000 ids/names (no huge
IN (...)lists); re-importing an unchanged sheet with override does not rewrite the texts - Performance:
PageServicesearch / publishable pages read the page columns only and load eachPageType(with its schema XML) once; no SQL ORDER BY on the export;Saveuses a targeted UPDATE andRemovea set-based delete - Fix: publishable pages of a site no longer include pages of languages the site does not publish
- Performance:
GetFilereads only the requested blob (content or thumbnail); overriding a file updates it in place without reading the old blobs;Removeof widgets / publications is a set-based delete;GetAllRevisionsis ordered and does not load the text - Performance: one widget / link cache and one parsed schema per page type for the whole export; texts grouped once per language; ordinal placeholder replacement;
GalleryAtom.Validateis linear - Performance: publication ZIP streamed from the database to a temporary file (
IPublicationService.CopyZipTo) and extracted off the consumer thread (ICompressionFileService.DecompressFile);PublishWebsiteConsumerno longer loads the ZIP in memory; ZIP built withCompressionLevel.Fastest - Performance:
SFTPTransferServiceuses the asynchronous SSH.NET API (no thread blocked for the whole transfer) - Performance: NHibernate batch fetching on
TextType,PageType,FtpServer,CdnServer,Folder - New:
Db/indexes.sql(foreign key and widget indexes) andDb/optional_optimizations.sql(Contenuti.CONTENUTOntext → nvarchar(max), unique index on text revisions): run manually - Tests: page / widget behavior on both providers, end-to-end export and publish with fake services
#2026-06-12
- Performance:
Text.REVISIONSno longer auto-included; only the latest revision is loaded per text via a single correlated query (was eager-loading every historical revision with full content on every read) - Performance: removed redundant circular
TextRevision.TEXTauto-include - Performance:
CleanRevisionsdeletes excess revisions via SQL correlated count (no revision content loaded into memory) - Security:
GetFileByFullnameresolves same-named files by folder path (wasNotImplementedExceptionon multi-match) - Security:
RemoveFolderrefuses non-deletable folders and folders whose subtree contains system folders - Security: path-segment validation (
PathSafety) on folder names, TextType/PageTypeSubfolderandOutputFilenameto prevent traversal - Fix:
Searchsorting crash when only some sort fields were set (Nullable.Valueon unset field) - Fix:
TransferService.GetFilenow returns the downloaded bytes (were discarded) - Fix:
TrinityEFContexttransaction field reset on commit/rollback + guarded begin (stale transaction from pooled context)
#2026-06-11
- New:
CountAsynconIRepository<T>(EF + NHibernate implementations) - Performance: async
Searchin TextService / PageService / WidgetService (CountAsync+ToListAsync) - Performance: async
WriteAllBytesAsync/ReadAllBytesAsyncin publication generation pipeline - Performance: O(n²) → O(n) folder tree build via
ToLookup(ParentId) - Performance: direct DTO projection in
GetAllFolders(no entity intermediate, async) - Performance:
MaxByinstead ofOrderByDescending().FirstOrDefault()in TextRevision mapping - Performance:
JRawinCreateJsonContentsDocument(no double-encoding, no dynamic dispatch) - Performance:
ExcelMapperServicesingle-sheet exports viaMemoryStream(no temp file) - Performance: retry with exponential backoff in
GenerateWebsiteConsumer(was busy retry, no delay) - Refactor:
Sortextension — explicitUnorderedhandling, safer casts; preservesIQueryable.Expression.Typecheck (EF Core concrete queryable implementsIOrderedQueryable<T>even before sorting, so runtime-type checks are unsafe) - Fix:
SerializedFileasync factory (Path.GetFileName,ReadAllBytesAsync)
#2026-06-10
- New: provider-agnostic
IRepository<T>(EF Core + NHibernate) with async query and bulk operations - Performance: eliminate N+1 queries in publishing, import, and website configuration flows
- Performance: bulk
ExecuteDeleteAsyncfor revisions and join tables - Performance: O(n²) → O(n) in text reduction via
ToLookupindexing - Performance: direct DTO projection in file listing (optional blob columns)
- Performance: widget resolution with compiled regex and per-call batched lookups
- Performance: XML parsing via
XDocument.Parse, element lookup viaToLookup - Performance: async blob streaming in publications (
GetFieldValueAsync, sequential access) - Performance: stream-based FTP/SFTP transfers, deduplicated file enumeration
- Fix: duplicate FTP entries on CDN update
- Fix: SkiaSharp native resources properly disposed; correct output buffer
#2026-06-03
- Security: add filename and folder name validation in FileManagerService (trim, invalid chars check)
- Security: fix duplicate assignment of NAME in SaveFolder
- Performance: fix N+1 query in GetFileLink (single query + in-memory traversal)
- Performance: fix N+1 query in CheckFileToFolder (load filenames once into HashSet)
- Performance: fix loop DELETE on text revisions in TextService.Remove
- Performance: remove unused recursive method GetAllSubfoldersByFolder
- Performance: remove async/await Task.FromResult overhead across all service methods (26 occurrences)
- Refactor: fix multi-dot filename handling in CheckFileToFolder (use LastIndexOf)
#2026-03-16
- Fix SFTPTransferService
- Optimize ZipCompressionService
#2025-02-13
- Add useOriginalFormat to AddFile interface
- Introduce useMobile attribute in atom
#2025-02-05
- Add SeparatorAtom support
- Add "Extend" property in TextAtom
- Fix "Mobile", "Target" support in ImageAtom
- Add extra name, description support in ImageParticol
#2025-01-27
- Fix publish error email
- Update nuget packages
#2024-11-04
- Fix gif animate compression bug
#2024-10-30
- Improve export algorithm
#2024-10-29
- Remove formatting problems
#2024-10-28
- Clean code for better performance
- Update packages
#2024-04-04
- Update packages
#2024-03-31
- Update packages
- Fix warning
#2024-01-31
- Migrate to NET8
#2023-10-05
- Add DateTime Atom
#2023-07-08
- Migrate to NET6
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- MassTransit (>= 8.1.3)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.5)
- Microsoft.Extensions.Options (>= 10.0.5)
- System.Text.Json (>= 8.0.5)
- TrinityText.Business (>= 1.4.80-beta)
- TrinityText.ServiceBus (>= 1.4.80-beta)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.4.80-beta | 42 | 10/1/2026 |
| 1.3.79-beta | 41 | 9/29/2026 |
| 1.3.78-beta | 120 | 6/11/2026 |
| 1.3.77-beta | 113 | 6/11/2026 |
| 1.3.76-beta | 112 | 6/10/2026 |
| 1.3.75-beta | 112 | 6/3/2026 |
| 1.3.74-beta | 119 | 6/3/2026 |
| 1.2.73-beta | 151 | 3/16/2026 |
| 1.2.72-beta | 585 | 7/24/2025 |
| 1.2.71-beta | 578 | 7/24/2025 |
| 1.2.70-beta | 200 | 2/13/2025 |
| 1.2.69-beta | 190 | 2/5/2025 |
| 1.2.68 | 270 | 11/4/2024 |
| 1.2.67-beta | 185 | 10/30/2024 |
| 1.2.66-beta | 191 | 10/30/2024 |
| 1.2.65-beta | 201 | 10/29/2024 |
| 1.2.64-beta | 195 | 10/29/2024 |
| 1.2.63-beta | 192 | 10/28/2024 |
| 1.2.62-beta | 211 | 5/7/2024 |
| 1.2.61-beta | 203 | 5/7/2024 |
Loading failed