Nello script precedente (https://www.aspitalia.com/script/1393/Gestire-Dipendenze-Pacchetti-NuGet-Visual-Studio-2019.aspx) abbiamo visto come in .NET Core e Visual Studio 2019 possiamo creare una solution di pacchetti NuGet e gestirne le dipendenze semplicemente impostando le project reference.
Quando utilizziamo un approccio di questo tipo, il versioning dei nostri package riveste un ruolo fondamentale. Ripensiamo al nostro progetto di esempio, in cui Package2 ha una dipendenza da Package1.
Nel momento in cui produciamo una nuova versione di uno dei due pacchetti, che magari introduce una breaking change nel modello a oggetti, dovremo innanzi tutto aumentarne il numero di versione. Ma, da solo, questo accorgimento non ci pone al riparo da potenziali problemi: se un nostro consumer installerà versioni incompatibili avrà di sicuro dei malfunzionamenti.
Il primo passo, allora, è rendere il più possibile evidente questo concetto di "compatibilità" e una best practice (utilizzata per esempio da ASP.NET Core stesso) è quella di far sì che tutti i pacchetti generati dalla stessa solution abbiano allora il medesimo numero di versione. In buona sostanza, vogliamo che Package2 di versione 2.1.35 sia compilato insieme a Package1 di versione 2.1.35.
Per essere sicuri che le versioni siano sempre allineate, possiamo sfruttare il file Directory.build.props:
Si tratta di un file XML che dobbiamo creare nella root della solution, in cui possiamo specificare le proprietà comuni a tutti i progetti della solution stessa:
<Project> <PropertyGroup> <Authors>Contoso Ltd</Authors> <Company>Contoso Ltd</Company> <Version>2.1.35</Version> </PropertyGroup> </Project>
Queste proprietà verranno automaticamente iniettate in fase di build in tutti i progetti, che così avranno (in base all'esempio in alto) gli stessi autori, ma soprattutto lo stesso numero di versione:
Si tratta di una funzionalità di MsBuild e pertanto funzionerà tanto in Visual Studio, quanto in una build pipeline per esempio su Azure DevOps.
Versioning lato consumer
La stessa tecnica può essere utilizzata per far sì che anche in una solution che sfrutta i nostri pacchetti, i vari progetti (che possono referenziare alcuni o tutti i nostri package NuGet) referenzino tutti in maniera consistente lo stesso numero di versione, così da evitare conflitti in fase di build e potenziali malfunzionamenti.
Tutto ciò che dobbiamo fare è, anche in questo caso, creare un file Directory.Build.props nella root, dove definire una variabile custom simile al codice in basso:
<Project> <PropertyGroup> <ContosoPackagesVersion>2.1.35</ContosoPackagesVersion> </PropertyGroup> </Project>
A questo punto, nei vari file di progetto, invece che fare riferimento in maniera esplicita alla versione, possiamo referenziare la variabile appena creata:
<Project Sdk="Microsoft.NET.Sdk"> ... <ItemGroup> <PackageReference Include="Package1" Version="$(ContosoPackagesVersion)" /> <PackageReference Include="Package2" Version="$(ContosoPackagesVersion)" /> </ItemGroup> ... </Project>
Quando ci troveremo ad aggiornare a una nuova versione, potremo modificare la reference unica in Directory.Build.props e tutti i progetti della solution resteranno allineati.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Controllare gli accessi IP alle app con Azure Container Apps
Gestire la cancellazione di una richiesta in streaming da Blazor
Creare alias per tipi generici e tuple in C#
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Installare le Web App site extension tramite una pipeline di Azure DevOps
Potenziare Azure AI Search con la ricerca vettoriale
Generare token per autenicarsi sulle API di GitHub
Ottimizzazione dei block template in Angular 17
Disabilitare automaticamente un workflow di GitHub (parte 2)
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Supportare il sorting di dati tabellari in Blazor con QuickGrid
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2