为什么ASP.NET编译器会在每个构建中重建所有二进制文件?

dev*_*lop 11 .net c# asp.net aspnet-compiler

当我使用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\
Run Code Online (Sandbox Code Playgroud)

请注意,只有WebSite项目才会出现此问题,而不是Web应用程序项目(它们的编译方式不同).即使您创建一个没有功能的WebSite项目和页面,也不会打开它或在构建之间以任何方式更改它,也会出现此问题.

反编译生成的二进制文件显示没有差异.比较两个"相同"构建的二进制文件,每次在同一部分的二进制文件中显示出小的差异 - 我认为这可能与随机构建guid有关.我发现在构建之间没有办法避免这种变化.

Rua*_*rge 0

我发现在很多情况下使用 aspnet_compiler 特别是在我的项目引用同一解决方案中的其他项目的情况下,会导致通常难以解释的完全重建。(尽管我调查过几次,但还是有一些“变化”,即使它们并没有真正影响任何东西,例如空白、注释等的变化)

我在 Visual Studio 中的许多插件也遇到了问题,这些插件已经完成了从操作制表和其他空白、实际项目文件等所有操作。虽然这些更改对我们人类来说没有明显的变化,但编译器一看就会发现“我看到了变化!重建所有的东西!!!

不确定我的答案有任何帮助,但我会禁用你的插件,运行编译器,然后再次运行编译器,看看会发生什么......