Na mijn eerste kennismaking met HolonCom, werd de tweede week gekenmerkt door diepere technische uitdagingen rond projectconfiguratie, buildprocessen en package management. Deze week bracht niet alleen technische groei, maar ook waardevolle inzichten in probleemoplossing en softwarearchitectuur.
Build-configuratie en Multi-Solution Management
De week begon met het repareren van de Directory.Build.props file die de vorige week problemen veroorzaakte. Een belangrijke les was dat naamconventies in .NET essentieel zijn - zelfs hoofdlettergebruik kan impact hebben op hoe het systeem bestanden vindt en implementeert.
Het werken met meerdere solutions naast elkaar was een interessante uitdaging. Ik leerde dat je via parameters en flags kunt bepalen welke solution gebruikt wordt tijdens het buildproces. Dit werd cruciaal bij het omzeilen van het DotNetNuke project dat buildproblemen veroorzaakte, wat we oplosten door een tweede SLN file te maken zonder het problematische webproject.
ILRepack Verkenning en Hindernissen
Een aanzienlijk deel van de week besteedde ik aan het onderzoeken van ILRepack - een tool om meerdere DLL's samen te voegen tot één enkele DLL, die vervolgens als NuGet package gedistribueerd kan worden. De uitdaging hierbij was het gebrek aan documentatie en community support.
// Lokaal werkte de command line aanpak zoals:
ilrepack /out:CombinedLibrary.dll /lib:path\to\dependencies Library1.dll Library2.dll Library3.dllDe echte uitdaging lag in het integreren van dit proces in Gitea actions. De cross-platform compatibiliteit werd een obstakel - ILRepack is primair ontworpen voor Windows, terwijl de Gitea runners op Ubuntu draaiden. Mijn poging om MONO te implementeren als oplossing kwam dicht bij succes, maar uiteindelijk besloten we na grondig onderzoek om deze aanpak te verlaten en andere oplossingen te verkennen.
Project Configuratie en Props Files Management
Een cruciale leerfase was het begrijpen van .NET props files en hoe deze elkaar beïnvloeden op verschillende niveaus. Ik ontdekte dat properties op projectniveau die op solutionniveau overschrijven, wat een flexibel maar soms complex systeem creëert.
De implementatie van dynamische referentiewisseling tussen online NuGet packages en lokale projectreferenties was een significant hoogtepunt:
<!-- Voorbeeld van conditionele referenties in project file -->
<ItemGroup Condition="'$(ReferenceType)' == 'nuget'">
<PackageReference Include="HolonCom.Core" Version="$(PackageVersion)" />
</ItemGroup>
<ItemGroup Condition="'$(ReferenceType)' == 'source'">
<ProjectReference Include="..\..\Core\HolonCom.Core\HolonCom.Core.csproj" />
</ItemGroup>Deze aanpak werd later gerefactored om variabelen met descriptieve waarden te gebruiken in plaats van directe condities, wat de leesbaarheid en onderhoudbaarheid ten goede kwam.
Refactoring en Folderstructuur
Een groot deel van de week werd besteed aan het herstructureren van projectfolders en het centraliseren van logica in de Directory.Build.props files. Dit vereiste nauwkeurige aanpassingen van paden en referenties tussen projecten.
De reorganisatie van HolonCom.Core en HolonCom.Abstractions in één repository was succesvol, maar niet zonder uitdagingen. Het aanpassen van actions (YAML) files, project files en README.md implementaties leerde me het belang van consistentie en best practices in package publicatie.
Caching Uitdagingen
Een terugkerend thema was de impact van caching op het ontwikkelproces. Zelfs na het aanpassen van foute paden konden builds soms slagen door gecachte data, wat later tot verwarrende fouten leidde. Deze ervaring onderstreepte een cruciale les in softwareontwikkeling:
"Caching issues blijven een van de grote problemen binnen IT. Het is essentieel om hier waakzaam op te zijn."
Het systematisch leegmaken van de obj folder en soms zelfs de .VS folder bleek noodzakelijk, wat het belang van schone buildprocessen benadrukte.
Professionele Ontwikkeling
Naast technische groei bracht deze week ook persoonlijke ontwikkeling. Het gesprek met mijn stagementor over race conditions in asynchrone programmeertalen evolueerde naar een diepgaand gesprek over persoonlijke groei en kritisch denken. Het concept van de "chain of trust" versus eigen ervaringen was bijzonder inzichtgevend en benadrukte het belang van kritisch denken in softwareontwikkeling.
De kennismaking met mijn AP Hogeschool-begeleider bracht duidelijkheid over de stage-evaluatieprocessen en belangrijke mijlpalen voor de komende maanden.
Vooruitblik
De komende weken zal ik me richten op het systematisch migreren van managed libraries uit de command worker naar afzonderlijke projecten die als NuGet packages worden gedistribueerd. Dit zal het gebruik van libraries flexibeler maken en het debugproces vereenvoudigen.