De in Microsoft .NET 9 geïntroduceerde versie 6.12 van de NuGet package manager biedt veel voordelen, maar leidt ondanks de verbeteringen toch tot prestatieproblemen. Dit wordt veroorzaakt door een vernieuwd algoritme.
De dependency resolver in NuGet 6.12, onderdeel van .NET 9, geeft ontwikkelaars nieuwe mogelijkheden. Met deze package manager kunnen zij via het commando dotnet restore op elk moment alle dependencies in externe libraries of downloads controleren. Het commando controleert niet alleen op compatibiliteitsproblemen, maar ook, sinds .NET 8, op beveiligingskwetsbaarheden.
Dankzij de verbeteringen in NuGet voor .NET 9 kan het proces van package restore tot vijftien keer sneller verlopen. Dit is mogelijk gemaakt door een vernieuwing van het verouderde dependency graph resolution-algoritme. Dit oude algoritme, dat sinds de eerste versie van NuGet werd gebruikt, werd als inefficiënt beschouwd en was oorspronkelijk bedoeld als tijdelijke oplossing.
Het nieuwe algoritme lostte eerdere problemen op, zoals extreem lange verwerkingstijden van 30 minuten of meer. Het gebruik van minder nodes zorgt ervoor dat de restore-tijden in sommige gevallen zijn teruggebracht tot slechts 2 minuten.
Toch problemen
Ondanks deze verbeteringen blijkt het vernieuwde algoritme in NuGet v6.12 nieuwe issues te veroorzaken. Hoewel de dependency resolver uiteindelijk dezelfde packages oplevert als het oude algoritme, worden daarnaast extra, ongebruikte packages gedownload.
Een specifiek probleem doet zich voor bij jQuery-versies. Het package jQuery.Validation is afhankelijk van jQuery 1.4.4, maar tegelijkertijd wordt jQuery 1.10.2 gespecificeerd. Het oude algoritme gebruikte alleen de voorafgaande versie, maar het nieuwe algoritme veroorzaakt een conflict. Hierdoor mislukt de restore wanneer geprobeerd wordt jQuery 1.4.4 te downloaden, aangezien deze versie niet beschikbaar is.
Een workaround voor dit probleem is het configureren van de feature RestoreUseLegacyDependencyResolver in de MSBuild-configuratie. Deze oplossing brengt echter weer de langzamere hersteltijden van het oude algoritme met zich mee, terwijl NuGet 6.12 juist bedoeld was om dit te versnellen.
Op dit moment heeft Microsoft nog geen definitieve fix uitgebracht. Het is aannemelijk dat een oplossing binnenkort volgt, aangezien Microsoft deze ontwikkeltools ook intern gebruikt.
Lees ook: Microsoft voert duizend verbeteringen door aan .NET9