首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么ASP.NET编译器在每次编译时都要重新编译所有的二进制文件?

为什么ASP.NET编译器在每次编译时都要重新编译所有的二进制文件?
EN

Stack Overflow用户
提问于 2013-01-11 04:04:59
回答 2查看 1.2K关注 0票数 11

当我使用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参数:

代码语言:javascript
复制
aspnet_compiler -f -u -fixednames -nologo -v / -p .\myproject\ .\mybuild\

请注意,此问题仅发生在WebSite项目中,而不是Web应用程序项目中(它们的编译方式不同)。同样,即使您创建了一个没有任何功能的WebSite项目和页面,并且永远不会在两次构建之间打开或更改它,也会出现此问题。

反编译生成的二进制文件没有任何差异。比较两个“相同”构建的二进制文件,每次都会发现二进制文件的相同部分存在微小差异-我相信这可能与随机构建guid有关。我找不到任何方法来避免构建之间的这种变化。

EN

Stack Overflow用户

发布于 2013-03-26 22:57:35

请查看Eric Lippert的这篇优秀的answer,它讲述了C#编译器如何进行多次遍历来编译源代码。我可以有很多原因,为什么你的构建与前一个不相同,尽管功能是相同的。

块编译器替换了特殊的语言功能,例如在IL equivalents

  • The编译器中使用block对代码进行了许多优化,每次迭代产生的代码可能略有不同必须为匿名方法名创建实例化名称,每次编译

  • 时它们都是不同的,还有更多原因您可以使用反汇编程序

轻松地找出原因

查看这些反汇编程序并反编译您的库或可执行文件,以获得更好的理解。

http://ilspy.net/http://www.telerik.com/products/decompiler.aspx

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14266328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档