.net – What’s the difference between a dll’s FileVersion and ProductVersion

netversioning

What's the difference between a dll's FileVersion and ProductVersion?

Specifically at runtime, is one used for strong binding, and the other informational?

I'd like to have one set manually, and the other incremented automatically (via our CI build process)

Edit: Richard answered the part I missed in the original question. It's Assembly version that I want to manually control (incrementing with interface changes) while it's File Version that I want my CI system to automatically increment with every build. Thanks.

Best Answer

Files are distributed as part of a larger project. A file with individual build version x might be distributed as part of project version y.

To elaborate: A.exe with product version 1.1 ships with files B.dll and C.dll. All start out with matching product and file versions. Then someone finds a serious bug in the product. The developer looks at it, and issues a fix that only updates B.dll. Now the product version probably updates as well, to 1.1.1 to account for the minor fix. And B.dll's file version will also be 1.1.1. But A.exe and C.dll didn't change, and so their file version might still be 1.1.