My company has a huge C++/C# software system composed of 1800 binaries. The technology range goes from old school native C++/MFC, then C++/CLI, up to .NET Framework and .NET Core 6. Almost all possible project types within these technologies exist in our 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 files, 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 DLLs, so ideally we don't want to go that way.

Any ideas, strategies and/or recommendations on how to produce a patch installer which is as small as possible?

Currently we have an automated PE Header comaparer system running, but it fails sometimes to recognize small changes in our binaries. Suggestions on 3rd party solutions/frameworks are welcome since Microsoft does not seem to address this issue.