Change Assembly Version in a compiled .NET assembly
Simple question... is there a way to change the Assembly Version of a compiled .NET assembly?
I'd actually be fine with a way to change the Assembly File Version.
You can use ILMerge:
ILMerge.exe Foo.dll /ver:1.2.3.4 /out:Foo2.dll
A valid reason to do this is to increment the assembly version in a build in you find breaking changes (using NDepend for example). That way if there are no breaking changes the assembly version stays the same, and you can patch released builds easily.
We always increment the file version, and that reflects the build number.
Old topic but here are my 5 dimes...
-
Disassemble
ildasm my.exe /output:my.il /metadata
-
Edit my.il to change version information. There are several places to look into:
- major:minor:revision:build - usually one occurrence
- major.minor.revision.build - several occurrences. The string is found in the comment section after the actual line. The version is a hexadecimal value in a byte array. Example:
.custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = ( 01 00 07 35 2E 31 2E 33 2E 30 00 00 ) // ...5.1.3.0..
Edit my.res to change version information. Double click and edit with visual studio. Pretty straight forward procedure.
-
Assemble
ilasm my.il /res:my.res
Why do you want to do this? If it's so that another application can use it, you might want to look into assembly binding redirection instead.
It sounds like your process is heavy because you have to update multiple AssemblyInfo files. Have you considered sharing the same AssemblyInfo file between projects? Derik Whittaker gives a good example on how to do this.
Once you have a single file, you could then go the extra distance by having a build process update your single AssemblyInfo version using MSBuild or NAnt.