当我使用aspnet_compiler重新编译我的项目(asp.net,c#)时,即使没有进行任何代码更改,重新构建的二进制文件也会发生变化。
我明白这是因为每次构建都会生成一个新的模块版本ID(GUID)来区分不同的构建;另一个相似的问题谈到了这个问题:Can i specify the module version id (MVID) when building a .net assembly?
上面链接的问题似乎表明,重新构建项目,并使二进制文件与相同未更改的代码的先前构建匹配的方法不存在。好吧,没问题,我理解了 - 但是为什么所有的二进制文件都被重新构建呢?
根据文档(http://msdn.microsoft.com/en-us/library/ms229863(v=vs.80).aspx),我认为除非指定-c作为参数,否则aspnet_compiler应该只重建实际需要重建的那些二进制文件(由于代码更改)。我是否误解了或者可能漏掉了什么?
我正在使用的aspnet_compiler参数:
aspnet_compiler -f -u -fixednames -nologo -v / -p .\myproject\ .\mybuild\
请注意,这个问题只会在WebSite项目中出现,而不是Web Application项目(它们编译方式不同)。即使您创建一个没有功能的WebSite项目和页面,并且在构建之间从未打开或更改过它,这个问题仍然会出现。反编译生成的二进制文件并没有显示任何差异。比较两个“相同”的构建的二进制文件时,每次都会在相同部分显示小的差异 - 我认为这可能与随机构建GUID有关。我没有找到避免这种构建之间变化的方法。