FireSoft.Core 10.0.21

dotnet add package FireSoft.Core --version 10.0.21
                    
NuGet\Install-Package FireSoft.Core -Version 10.0.21
                    
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="FireSoft.Core" Version="10.0.21" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="FireSoft.Core" Version="10.0.21" />
                    
Directory.Packages.props
<PackageReference Include="FireSoft.Core" />
                    
Project file
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 FireSoft.Core --version 10.0.21
                    
#r "nuget: FireSoft.Core, 10.0.21"
                    
#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 FireSoft.Core@10.0.21
                    
#: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=FireSoft.Core&version=10.0.21
                    
Install as a Cake Addin
#tool nuget:?package=FireSoft.Core&version=10.0.21
                    
Install as a Cake Tool

FireSoft.Core

Libreria di base per lo sviluppo dei software di FIRESOFT ITALIA SRL: validazioni italiane, estensioni sui tipi di uso quotidiano, crittografia, tracciamento delle modifiche alle entità e contratti comuni per i repository.

Utilizzo privato. La libreria è realizzata per i prodotti FireSoft Italia e non è destinata alla distribuzione pubblica. Tutti i diritti riservati.

  • Piattaforma: .NET 10.0
  • Nullable reference types abilitati, implicit usings disabilitati
  • Documentazione XML in italiano distribuita insieme al pacchetto

Cosa contiene

Area Contenuto
Validations Codice fiscale (persone fisiche e giuridiche), partita IVA, IBAN, EAN-8, EAN-13, email, codice fiscale estero
DataAnnotations Gli attributi corrispondenti alle validazioni, più obbligatorietà, lunghezza massima e numero di decimali
Extensions Metodi di estensione su string, decimal, DateTime, object, DataRow, DataTable, Dictionary, IQueryable, HashSet, int, long, bool
Helpers Crittografia, cifratura dei file, codici a barre, calcoli contabili, hashing delle password, interrogazione del servizio VIES, gestione di file e processi
Services EntityUpdater e LoggedEntityUpdater per aggiornare le entità tracciandone le modifiche, DiscardableTaskService per le operazioni asincrone annullabili
Repositories Interfacce del pattern repository, separate per operazione
Entities, Loggers Interfacce marcatore delle entità di dominio e contratti di logging
Signatures FesSignatureFormula: la formula FES5 dello SignatureHash della firma elettronica semplice, unica per chi registra la firma e per chi la verifica

Note d'uso

Formula FES5 della firma elettronica

FesSignatureFormula è congelata: ogni firma raccolta resta verificabile solo finché la formula non cambia, e una formula diversa avrà un prefisso diverso (FES6:).

  • BuildCanonicalAsync(connection, signatureId, transaction) legge la firma e il suo OTP dal database, a colonne esplicite. La connessione deve essere già aperta; se sulla connessione è aperta una transazione, va passata, o il provider rifiuta il comando. Restituisce null se la firma non esiste o non ha l'OTP collegato.
  • ComputeHash(canonical) dà il valore da salvare (FES5: più 44 caratteri di Base64); IsFes5 e Matches riconoscono e confrontano un valore salvato.
  • Ogni colonna ha un tipo atteso: un valore di tipo diverso fa lanciare NotSupportedException invece di cambiare l'hash in silenzio.

Conversioni da stringa a numero

ToNumber, ToInt e ToLong leggono il separatore decimale dalla sua posizione — vale l'ultimo punto o virgola, quelli prima sono separatori delle migliaia — e non dalle impostazioni della postazione. Lo stesso testo si legge quindi allo stesso modo su qualunque PC.

"1234.56".ToNumber()      // 1234,56
"1234,56".ToNumber()      // 1234,56   la virgola di chi non segue la specifica
"1.234,56".ToNumber()     // 1234,56
"1,234.56".ToNumber()     // 1234,56   e la convenzione inglese
"12.50 KG".ToNumber()     // 12,50     lettere e simboli vengono ignorati
"1.500".ToNumber()        // 1,5       ambiguo per natura: vedi sotto

Per gli importi digitati esiste ToMoney, che vuole i decimali del campo:

"1.000".ToNumber()      // 1       l'ultimo separatore è decimale
"1.000".ToMoney(0)       // 1000    zero decimali: è delle migliaia
"1.000,50".ToMoney(0)    // 1000,50 l'ultimo non ha tre cifre dopo: è decimale
"2.500".ToMoney(2)       // 2,5     con due decimali il punto è decimale

Perché solo gli importi hanno il parametro. La differenza non è una convenzione, è il formato con cui i valori vengono scritti:

formato separatore delle migliaia rileggendolo
Format.Number(n) → 0.## mai l'unico separatore è quello decimale: nessuna ambiguità
Format.Currency(n) → #,##0.00 sì 2.500 è ambiguo fra duemilacinquecento e due e mezzo

Vale anche a zero decimali: Format.Number(0) scrive 2500, non 2.500. Per questo un campo numerico si rilegge sempre con ToNumber(), mentre un campo importo vuole ToMoney(decimali).

Con 0 un separatore vale come migliaia solo se seguito da esattamente tre cifre, così un decimale digitato per errore non viene scartato: 1.5 resta uno e mezzo. È il caso delle valute senza centesimi — la corona ceca — dove 1.000 battuto in un campo importo è mille e non uno.

⚠️ ToMoney non va usato per i dati che arrivano da fuori, nemmeno quando sono prezzi: il formato di un file lo decide chi lo scrive, non i decimali del nostro archivio. Per quelli si usa ToNumber().

⚠️ ToNumber è il metodo inverso di ToSql(): un valore formattato con quello e riletto con questo torna identico, in qualunque culture. Non era vero fino alla 10.0.16.

Gli stessi metodi esistono su object, comprese le versioni nullable, per le celle di un DataRow e i valori di un JsonElement: da preferire a valore.ToString()!.ToNumber(), perché un valore già numerico viene convertito direttamente invece di passare dalla sua rappresentazione testuale, che seguirebbe la culture della postazione.

ToInt e ToLong non hanno il parametro: ciò che si legge come intero — identificativi, contatori, anni, quantità di pezzi — non porta separatori delle migliaia. Per un importo intero di una valuta senza centesimi si legge con ToMoney e si tronca: (int)testo.ToMoney(0).

Dalla 10.0.17 sono spariti ToDecimalInvariant/ToIntInvariant/ToLongInvariant — leggevano "12,50" come 1250 e "1.234,56" come 0, e nessuno li usava — e con loro Rounding.UseCurrentCultureOnConvertString, che decideva la lettura per l'intero processo a partire dai decimali dell'archivio: un XML di fatture veniva letto secondo la valuta configurata.

Crittografia

Cryptography.EncryptAuthenticated e DecryptAuthenticated usano AES-GCM, che rileva la manomissione del testo cifrato. I metodi Encrypt, Decrypt ed EncodeToMd5 sono deprecati e conservati per la sola lettura dei dati esistenti: il compilatore lo segnala.

FileCryptography cifra i file in streaming, ed è pensato per i backup di database, che possono pesare diversi GB. Dalla versione 3 del formato ogni file porta in coda un tag HMAC-SHA256 che copre intestazione e contenuto, così troncamenti e alterazioni vengono rilevati al ripristino.

I file nel formato precedente restano leggibili. Il contrario non vale: un file scritto nel formato 3 non può essere aperto da una versione della libreria antecedente alla 10.0.12.

Aggiornamento delle entità

EntityUpdater copia le proprietà da un oggetto all'altro; LoggedEntityUpdater fa lo stesso e compone il testo dello storico delle modifiche. Entrambi assegnano il valore che ricevono, senza trasformarlo: la stringa vuota resta tale e non diventa NULL. Se una colonna deve contenere NULL anziché una stringa vuota, la conversione spetta al chiamante, che è l'unico a conoscerne la definizione.

Validazione della partita IVA

Per le partite IVA italiane viene verificata anche la cifra di controllo. Per gli altri paesi il controllo è solo di forma, perché l'algoritmo varia da Stato a Stato: quando serve sapere se un identificativo esiste davvero si interroghi il servizio VIES con Helpers.ViesQuery.


Compilazione

La cartella contiene più file di progetto, quindi i comandi dotnet richiedono di indicare quello su cui operare:

dotnet build FireSoft.Core.csproj                # compilazione
dotnet build FireSoft.Core.csproj -c Release     # compilazione con offuscamento
dotnet test FireSoft.Core.sln                    # suite di test
dotnet pack FireSoft.Core.csproj                 # pacchetto NuGet

La configurazione Release applica l'offuscamento con .NET Reactor.


Problemi conosciuti

Nessuno aperto.

Il comportamento nei casi limite — conversioni fuori intervallo, valori vuoti, input malformati — è descritto nei commenti XML dei singoli metodi, che l'ambiente di sviluppo mostra al momento della chiamata.


Copyright © 2026 FIRESOFT ITALIA SRL

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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.
  • net10.0

    • No dependencies.

NuGet packages (6)

Showing the top 5 NuGet packages that depend on FireSoft.Core:

Package Downloads
FireSoft.Win.Ui

Librerie di base FireSoft Italia Srl

FireSoft.Data.SqlClient

Librerie per l'accesso all'Sql Server di FireSoft Italia Srl

FireSoft.Web.Ui

Librerie per l'interfaccia grafica nelle web application di FireSoft Italia Srl

FireSoft.Maui.Ui

Librerie per lo sviluppo di App Maui di FireSoft Italia Srl

FireSoft.Web.Standard.Entity

Librerie per le gestioni standard nelle web application di FireSoft Italia Srl

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
10.0.21 236 10/24/2026
10.0.20 250 10/16/2026
10.0.19 370 9/4/2026
10.0.18 344 8/14/2026
10.0.16 140 8/14/2026
10.0.15 183 8/11/2026
10.0.14 145 8/11/2026
10.0.13 165 8/10/2026
10.0.12 178 7/29/2026
10.0.11 438 6/18/2026
10.0.10 624 5/12/2026
10.0.9 256 5/6/2026
10.0.8 269 3/23/2026
10.0.7 273 3/11/2026
10.0.6 243 2/28/2026
10.0.5 165 2/23/2026
10.0.4 168 2/22/2026
10.0.3 166 2/21/2026
10.0.2 390 1/20/2026
10.0.1 166 1/20/2026
Loading failed