都说asp.net的机制是编译可我怎么觉得他即是编译又是解释呢????就好比叫一个副经理为经理一样,微软老是拔高自己????

syc958 2009-03-13 05:13:04
都说asp.net的机制是编译可我怎么觉得他即是编译又是解释呢????就好比叫一个副经理为经理一样,微软老是拔高自己????


比如我把程序写在<%%>这里面或是<%=%>这里面!我们发布网站后会发现dll文件里并没有我们刚才写的那些代码????请问,我们是不是上了微软的当????


个人觉得asp.net是个解释到编译的过度体.....
...全文
342 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
syc958 2009-03-18
  • 打赏
  • 举报
回复
很多高人都悔 人 不 倦 了,确实我也从中得到了很多....真是越来越发现自己会的太少了....理论不高发展就受控呀.......
cwmwss 2009-03-18
  • 打赏
  • 举报
回复
UP
xsm545 2009-03-16
  • 打赏
  • 举报
回复
帮顶下,,看来还要学习很多
lonelySurvive 2009-03-16
  • 打赏
  • 举报
回复
你们的境界很高!
xhinker 2009-03-16
  • 打赏
  • 举报
回复
To zhoufoxcn
Java 是在默认情况下编译解释执行,jsp 页面到class 文件是编译,class 字节码在虚拟机里则是解释执行。
所以说,Java既非编译执行,也非解释执行,而是编译解释执行。
sunzhong2003 2009-03-14
  • 打赏
  • 举报
回复
2005发布网站,不选择可更新预编译此站点,你就会发现问题所在
jianice 2009-03-14
  • 打赏
  • 举报
回复
好多高手啊,搬个小板凳好好学习中......
  • 打赏
  • 举报
回复
如果你仔细看上面输出,连aspx每一行定位到编译出的哪一条c#语句都可以看得很清楚。
  • 打赏
  • 举报
回复
这可以说明说aspx“解释执行”是错误的。
  • 打赏
  • 举报
回复
对于任何aspx,你可以在aspx文件加上这样一段:
<script runat="server">
adfas //这里随便些什么乱码都可以
</script>


然后在浏览器中查看(不要经过vs编译,因为根本编译不过),可以看到页面上有“显示完整的编译源:”,点击它就可以看到整个页面编译之后的详细的代码。
pgameli 2009-03-14
  • 打赏
  • 举报
回复
学习了
周公 2009-03-14
  • 打赏
  • 举报
回复
照你这么说,jsp也是解释型的了,在jsp中不也支持这样做吗?
实际上在第一次运行页面时会被编译成中间代码(在jsp中先编译成servlet,然后编译成class,在asp.net首先编译成.cs文件,再编译成dll文件),最终会由JIT编译成本地机器代码。
只要页面不发生变化,以后运行时会将中间代码编译成本地机器代码运行(如果两次运行的时间很短,有可能还会直接运行内存中缓存的机器代码)。
feifeiyiwen 2009-03-14
  • 打赏
  • 举报
回复
楼上的解释的太全面了
xhinker 2009-03-13
  • 打赏
  • 举报
回复
我是www.asp.net 的Andrew Zhu - MSFT http://forums.asp.net/25.aspx

在这里跟楼主和大家澄清一下:
ASP.NET 里面是不存在解释执行这一说法的。
如果要理解ASP.net 首先要理解.Net CLR 的工作原理,CLR虽然和Java 虚拟机很像,却不是解释执行。
Java 虚拟机最开始是对字节码进行解释执行(后来也有了动态编译执行)
CLR 则是动态编译执行。也就是中间语言字节码IL 是动态编译执行的,具体可以参考MSDN.

然后说到ASP.NET. asp.net 程序说白了其实就是.NET dll 如同java里的servlet jar 文件。
每个aspx和behind 的cs 文件以及看不到的内存里的control objects三部分最终要合并到dll里
所以你看到后台的cs class是partial 的。
inline的code也就是 <%%>里的code 其实和后置的代码的执飞行方式是一样的,后置的原因是为了使底层逻辑和页面开发分离等原因。
所以ASP.NET 是编译执行的.
vrhero 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 syc958 的回复:]
毕竟windows本身是可以解释asp的所以我们不能因为CLR之上并没有一个解释器存在...就敢说那些代码不是以asp方式运行的呀?看来我得好好查查资料看看书...真的晕了....多谢这个两星的兄弟给我这么多建议...
[/Quote]
首先windows本身是绝对没有可能解释asp的...能够解释asp的是asp.dll,IIS的一个Web服务扩展,并且在IIS6以上版本默认被禁用...

其次都跟你说的很清楚了...任何托管代码不管它是什么形式都必须编译为IL代码才能执行,所以我敢100%的说那些代码绝对不是以解释方式运行的...
syc958 2009-03-13
  • 打赏
  • 举报
回复
knightwayne 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 vrhero 的回复:]
你连.NET的编译机制都没搞清楚就来评论它...

MSDN中说的很清楚...

ASP.NET 网页中支持嵌入式代码块,主要用于保留与旧的 ASP 技术的向后兼容性。一般情况下,将嵌入式代码块用于复杂的编程逻辑并不是最佳做法,因为当页中的代码与标记混合时,很难进行调试和维护。此外,由于代码仅在呈现页的过程中执行,因此与将代码置于适当的页处理阶段以执行后台代码或脚本块代码相比,其灵活性大大降低。

微软只是提供了一个给…
[/Quote]

是这个理
Dobzhansky 2009-03-13
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 syc958 的回复:]
请问动态编译后保存在dll里还是哪里呢?每次运行都动态编译吗?
[/Quote]

IIS 真正使用的dll 位于

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 目录下面的子目录中,

可以通过检查 iis 进程空间中的 dll 发现
syc958 2009-03-13
  • 打赏
  • 举报
回复
毕竟windows本身是可以解释asp的所以我们不能因为CLR之上并没有一个解释器存在...就敢说那些代码不是以asp方式运行的呀?看来我得好好查查资料看看书...真的晕了....多谢这个两星的兄弟给我这么多建议...
vrhero 2009-03-13
  • 打赏
  • 举报
回复
.NET的托管代码都是要由CLR编译成IL代码才能执行的...所以嵌入式代码块在非“不可更新完全预编译”的时候也只是在运行时动态编译,CLR之上并没有一个解释器存在...
加载更多回复(16)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧