I am analysing a Windows Forms application in .NET Framework 4.5.2 with 4 separate solutions with a combined 1.5million lines of code (and 10 years of development)
- Libraries.sln (54 projects)
- Tools.sln (18 projects with many depending on 28 projects in Libraries)
- MainApp.sln (140 projects with many depending on 28 projects in Libraries)
- MainAppTest.sln (60 projects with dependencies on many projects in MainApp)
All references currently are hardcoded to specific dll's in corresponding bin/debug folder
Currently it is only possible to do a build on 1 specific machine (with the correct drive mapping and folder structure)
- Put everything into a single solution and reference projects (so no direct referencing of build dlls). Could use solution folders to virtually segregate areas (Libraries, Tests, Tools)
- Keep the existing 4 solutions and start by using a private NuGet feed for the 28 shared Libraries (I tried this using Artifacts on Dev Ops and it works fine - however getting into complexity regarding whether to include pdb debugging symbols in the package)
- Pack multiples projects (eg the 28 shared libraries) into a single NuGet package - this has issues https://github.com/NuGet/Home/issues/3891
With today's modern machines and fast SSD's, is there any reason not to have a single massive solution (270 projects, 1.5m loc) for a solution which doesn't currently have code reuse anywhere else?
Thank you all I really appreciate your time and answers.
The problem I'm trying to resolve (and good to get me to define it) is getting the build working on another machine, so we can then automate the release process which is manual (10 hours of builds/running 11,000 tests/building the Inno installer). I imagine we will use Azure DevOps for CI/CD.
I believe the Libraries project changes sometimes, but the client wants to be able to step into the code when debugging, so can get clarity in case the issue is in there.
- Unknown as to the full clean build time of all the solutions (as I am leaving alone the only working machine which would take significant effort to rebuild)
- Good idea on a build script (if it comes to that)
All the responses have pertinent points - thank you again.