How to determine if an assembly changed after compile?
Posted on 2008-06-11
We are about to do an initial deployment of our fixedname ASP.Net app and we are contemplating the bug fix process. With each fix, we would like to release only the files affected. Rather than rely on the developer to track which files changed for the fix, we would like to automate the process as much as possible. This was pretty easy to do in classic ASP but in DotNet we are choosing to release only DLLs which means that the whole site is recompiled even though only one page changed. The end result is that all assemblies have different timestamps as well as different binary signatures (the CRC on the binary is different even though the source code did not change). How do we programmatically determine which assembly (dll) changed as the result of code change?
I know the easy answer is to use the DLL timestamp but this does not work for us since the Aspnet_compiler does not seem to operate as advertised. In otherwords, when we exclude the -c option only the changed components should be recompiled but my whole destination site is deleted and complied each time. Does this work for anyone else?
Below are the compile options we use. Note that we are using strong names with the hope it will discourage application tampering.
aspnet_compiler -v myApp -p "C:\temp\myApp" -f -d c:\App -nologo -fixednames -errorstack -keyfile c:\temp\MyStrongNameKey.snk aptca
A related question is how do we inject version numbers into page assemblies (and App_Code.dll) and can we use these version numbers to determine if a file changed?
Are these legitimate questions or is there an easier way to go about doing what we are trying to do?
Another question: is it appropriate to place all our business logic in App_Code or should we manage it externally and place separately compiled dlls in our bin directory?