当我使用 aspnet_compiler 重新编译我的项目(asp.net、c#)时,即使没有进行任何代码更改,重建的二进制文件也会发生变化(与以前的构建相比)。
据我了解,这是由于构建每次构建时都会生成一个新的模块版本 ID(guid)(以区分构建),另一个类似的问题谈到了这一点:我可以在构建时指定模块版本 ID(MVID)吗? .net 程序集?
上面链接的问题似乎表明没有办法重建项目并让二进制文件与先前构建的相同未更改代码相匹配.. 好的,很好,我理解 - 但为什么要重建所有二进制文件?
我认为,根据文档(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\
请注意,此问题仅发生在网站项目中,而不是 Web 应用程序项目(它们的编译方式不同)。即使您创建了一个没有功能的网站项目和页面,并且在构建之间以任何方式打开或更改它,也会出现此问题。
反编译生成的二进制文件显示没有差异。比较两个“相同”构建的二进制文件每次都会显示二进制文件的同一部分存在微小差异 - 我认为这可能与随机构建 guid 有关。我发现无法避免构建之间的这种变化。