Every time we recompile our C# application we end up with EXEs with different MD5 signatures. We are recompiling on the same machine, minutes apart. Why doesn't the same source-code yield the same output? Is there a way to fix this?
相关问题
- Sorting 3 numbers without branching [closed]
- Graphics.DrawImage() - Throws out of memory except
- Why am I getting UnauthorizedAccessException on th
- 求获取指定qq 资料的方法
- How to know full paths to DLL's from .csproj f
"So every assembly has:
from:
http://ritter.vg/#code_adventures_clr1
I think the key there might be "minutes apart". If there is a timestamp within the EXE, then that would alter the MD5 signature.
There will be a built in version number that will change with every build.
You could try running ildasm.exe (my path for this is
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin
) on the two .exes.Then dump out the raw view of the headers, and compare them with a diff tool. If there is still no difference, then it might be the PE headers which would need a more advanced tool to discover. Ildasm gives you the PE header size and other statistics on it though.
I've had to dissect these cases before and it appears to just be DateTime-stamp type changes (it's a guess). If you put both assemblies under diff tools you'll see only a very small number of lines in the PE have changed; if you change even a small amount of code and compare assemblies you'll see drastically larger differences.
Here's a question I opened while researching tools to identify "real" differences from superficial ones:
.NET Assembly Diff / Compare Tool - What’s available?
Most likely you have several *'s in the version number of the assembly. This causes the assembly version number to be auto-incremented on build which will cause a visible difference in the outputted assembly. Hence a different MD5 checksum.
Try switching the version number to a constant assembly version and see if that fixes the issue.