My company has a huge C++/C# software system composed of 1800 binaries. The technology range goes from old school native C++ Static Libs, C++/MFC, C++/CLI, up to .NET Framework, .NET Core 3.1, .NET 6/8/etc. Almost all possible Visual Studio project types within this technology range exist in the software.
We struggle to find an optimal way to deploy these binaries at the client by sending them an incremental installer, since slighly changes in the source code may cause binaries to be built very differently.
We sign the DLLs and edit the version info, which also means that a new build of the software results in 1800 different binaries, when actually just a few bytes changed for each binary.
It is very hard to keep track of what source code changes caused exactly the change in the binaries. The complexity of tracking this for inter-related C++ projects is huge, so it is simply not a valid solution for us.
Currently we have an in-house automated PE Header compare system for detecting changes in the binaries from one version to the other, but sometimes it fails to recognize minor changes in some binaries, which sometimes lead to runtime failures.
Any good ideas, strategies and/or recommendations on how to produce an incremental patch installer for thousands of C++/C# binaries?
The installer should be as small as possible. Suggestions on 3rd party solutions/frameworks are welcome, since currently Microsoft does not seem to address this issue at all.