Asp.Net网站的的编译与发布原理

news/2024/5/20 23:53:52/文章来源:https://blog.csdn.net/weixin_30613433/article/details/97877454

如下所示创建一个简单的asp.Net Web应用程序

在VS中生成解决方案之后,可以在项目的目录下看到以下的文件:
当我们通过VS将网站发布出去之后,可以看到,最后生成的文件,如下图所示:
我们可以发现,发布之后的项目文件夹内少了很多文件,其实这是VS将aspx页面和一般处理程序以及Global文件等的后台文件都编译成了一个dll文件,这个dll文件存放在bin文件夹内:
对这个程序集进行反编译之后,可以看到我们写的后台代码都编译到这个dll文件中了
这个是一般处理程序的ProcessRequest方法中的代码,可以看到就是我们写的源代码:
此时项目文件夹内的几个文件中只剩下一些简单的声明了,所有后台代码都已经不见了:
Global文件:
一般处理程序:
aspx页面:
然后我们通过以下这句代码分别获得页面,一般处理程序以及Global编译运行时所在的位置:
        System.Reflection.Assembly.GetExecutingAssembly().Location
经过对比可以发现Global文件、一般处理程序、aspx后台代码所在的程序集文件为同一个,而aspx前台页面的代码运行在另一个程序集中,以下为运行的结果:
Global和aspx页面的前台与后台运行文件:
一般处理程序的后台代码:
我们可以看到IIS运行网站时,实际将网站编译之后的dll文件都放到了对应的Framework版本中的临时文件夹中了
即在C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files下,网站中自己写的后台代码与类库以及引用的类库都被编译到了这个临时文件夹下当前项目所在的文件夹下的assembly文件下。
 
 
网站发布后的文件分布图:
 
 
 
 
此时对比发布的网站根目录下的bin文件夹里的dll文件和一般处理程序运行时所在的程序集,可以发现两者是同一个文件:
此时如果删除网站根目录先的bin文件夹内的dll,然后再浏览页面内,可以发现网站无法正常运行:
由上面的结果可以看出,虽然网站中已经存在了一个后台代码的dll文件,但是网站实际运行的是系统文件夹中的那个dll文件,这个应该是直接从网站中拷贝过去的,它们的MD5值完全相同。
在这里可以推测,对于asp.Net应用程序来说,IIS只会编译aspx页面,一般处理程序,Global等文件,但是不会编译其他的类文件,所有的类文件对IIS来说没有用处,IIS只能使用编译好的dll文件。
当网站正在运行时,无法删除系统文件夹中的那个dll文件,显示被IIS Worker Process占用,这个更加说明网站实际运行时使用的是这个dll文件
那么这个IIS Worker Process进程是什么呢,当我们结束当前网站对应的w3wp.exe进程时,系统文件夹中dll被成功删除,这个可以说明,这个dll的调用者正是w3wp.exe这个进行,也说明了w3wp.exe是网站的工作进程。
当我们删除系统文件夹中的dll文件时,再次访问网站时会重新在系统文件夹中再次生成dll文件,而且第一次访问时候报错:
再次访问就正常了
总结:
所以可以总结出,在IIS中运行asp.Net应用程序时,前台页面的代码是即时进行更新和编译的,当我们修改前台代码时,不需要重新编译项目或者重新发布网站,在访问网站时,IIS(或者.Net框架?)检测到页面发生了修改会帮我们重新编译页面,而在修改了后台代码和其他的类文件的时候就需要我们手动对源代码进行重新编译了。


以上的内容都是针对Asp.Net应用程序来说的
对于Asp.Net网站来说发布网站时不会将页面和一般处理程序以及其他一些代码编译成dll文件,只会将源文件和引用的一些类库拷贝到网站的目录下,对于解决方案中的其他类库,也会在编译好之后再拷贝到Bin文件夹中。
在这里可以推测,在asp.Net网站中,IIS或者其他的程序,在有人第一次访问网站时,将App_Code文件里的源代码编译成了dll程序集
当用户第一次请求时才进行即时编译,编译好的文件也是存在于系统文件夹下
如:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\7812c4be\73872874
此时生成的文件有以下这些:
直接在VS中调试时,情况与上述在IIS中运行类似,只是最后所在的文件目录有所不同,而且会生成很多调试用的文件:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\website1\0e58724c\a4f149c8
           
总结:
         Web应用程序和Web网站的前台页面的代码都是在网站运行时,被初次访问时进行编译的,而对于后台代码和网站中的一些类文件来说,Web网站也会在网站第一次被访问的时候被编译,所以,Web网站中的后台代码更改后不需要手动进行编译,而在Web应用程序中,后台代码和类文件都会在发布的时候进行编译,编译成功才能够正常发布,所以对于Web应用程序,修改了后台代码就必须重新编译然后发布。
注:网站编译的临时目录可以在IIS中或者Web.config配置文件中进行配置,一下是IIS中的修改方法:
在服务器级或者网站级的".Net编译"选项中修改编译的临时目录,默认情况下临时目录为网站对应的.Net Framework的版本下的Temporary ASP.NET Files文件夹。

 

Write By 陌上荼靡

转载于:https://www.cnblogs.com/liuqiyun/p/6806807.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_817714.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

11个SEO人员必须知道的Chrome扩展插件

每个搜索引擎都有自己的运行规则,谷歌也是如此,Chrome SEO人员如能根据规则做好搜索引擎优化,将有效提高网站在谷歌的搜索排名。本文总结了11款口碑免费谷歌浏览器拓展,帮助SEO人员做好谷歌搜索引擎优化。 1、SEOquake。能够将所…

真人测试网站用户体验的超棒在线服务 - Peek by UserTesting

为什么80%的码农都做不了架构师?>>> 闲逛的过程中找到的这个工具网站,它可以帮助你测试你的网站用户体验,而且会发送给你一个5分钟的视频来展示一个实际的用户(不是机器,是人哦)如何操作你的网…

.net core Asp.net Mvc Ef 网站搭建 vs2017

1)开发环境搭建 首先下载安装vs2017 地址 :https://www.visualstudio.com/zh-hans/downloads/ 安装勾选几项如下图 ,注意点在单个组件时.net core 运行时一定要勾上,很多人都没勾结果新增不了.net core 项目 2)开发 1.新增.net core mvc …

腾讯云 LNMP+wordpress 搭建个人网站

折腾了好几个小时才弄好(php nginx略知一二),其实一点都不难! 以此记录一下,献给首次搭建的朋友们!! 1)准备工作:(因为个人用的ubuntu16.04 LTS系统 所以这是…

大型网站系统架构的演化

前言 一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计…

大型高并发高负载网站的系统架构

From:http://www.toplee.com/blog/71.html鄙人先后在CERNET做过拨号接入,在Yahoo&3721搞过搜索前端,在猫扑处理过mop.com的架构升级,在6.cn视频网站从事开发工作,还在多年的工作中接触和开发过不少大中型网站的模块…

学术研究网站

2019独角兽企业重金招聘Python工程师标准>>> 艾瑞网 iSuppli 转载于:https://my.oschina.net/lilugirl2005/blog/376442

高可用网站多点部署架构实战经验总结

本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一部分为读书笔记,一部分是个人经验总结。对大型分布式网站架构有很好的参考价值…

如何开发一个移动网站

无法改变基于该站点上下文的内容。 对于大多数移动设备和屏幕分辨率来说,很难进行设计。 3.单独设计一个移动站点 如果有大量预算的话,那么最理想的方法就是开发一个独立的专门由移动设备访问的网站。移动网站的设计,组织和填充一直关注移动用…

网站HTTP升级HTTPS完全配置手册

所有使用Google Chrome稳定版的用户迎来了v68正式版首个版本的发布,详细版本号为v68.0.3440.75,上一个正式版v67.0.3396.99发布于6月13日,自Chrome 68起,当在加载非HTTPS站点时,都会在地址栏上明确标记为“Not Secure&…

优化LNMP架构采用“Website Baker”为小型公司创建高性能网站方案

Intel嵌入式设计开发者秘笈(精品) [上海央邦]学一送一,超值! 必读版《十一攻破RHCE6.0、OCP》安博亚威】CCIE考试通过率第一! Cisco网络技术系列讲座 试听一个月,高端IT技术,五大项目3年经验 中国IT实验室收集整理 佚名 2011-11-24 9:07:51 保存本文 推荐给好友 收藏…

用Python从网站爬图片

从极客学院首页爬几张图片&#xff1a; 一下为titita.txt内容&#xff0c;为极客学院首页源代码节选&#xff1a; <div class"jk-uptodate"><h2>最新课程</h2><ul><li class"uptodate"><a href"/zhiye/course/135.h…

SharePoint 2013网站突然不能登录了。

SharePoint 2013网站突然不能登录了&#xff0c;访问的时候&#xff0c;总是报错&#xff1a; The list has not shared with you. 原因&#xff1a; 原来我不知道什么时候把web application的Default authentication provider中的验证方式从NTLM改成 Kerboes了。 【解决方法】…

网易网站设计(思想)

很多人可能认为门户网站首页设计只是把一些导航、资讯内容和广告堆积起来摆放得好看就可以了&#xff0c;虽然这个观点也并不是完全错误的&#xff0c;确实门户网站首页是由这三方面内容组织而成&#xff0c;但随着互联网的快速发展&#xff0c;用户对访问网站的要求也越来越高…

Java开发牛人十大必备网站

摘要&#xff1a; 以下是我收集的 Java 开发牛人必备的网站。这些网站可以提供信息&#xff0c;以及一些很棒的讲座&#xff0c; 还能解答一般问题、面试问题等。质量是衡量一个网站的关键因素&#xff0c;我个人认为这些网站质 量都很好。接下来&#xff0c;我会跟大家分享我是…

程序员必去的几个网站

2019独角兽企业重金招聘Python工程师标准>>> http://www.itheima.com/ 黑马 http://www.itcast.cn/ 传智博客 http://www.imooc.com/ 慕课网 http://www.jikexueyuan.com/ 极客学院 http://www.csdn.com 转载于:https://my.oschina.net/u/588516/blog/755753…

HTML5移动网站制作教程

&#xfeff;&#xfeff;http://www.thinkphp.cn/extend/461.html 希望我的分享能够为正在研究或者想要研究移动端的朋友们带来更高&#xff0c;更好的回报&#xff01; 本文是基于zepto框架下的手机移动端网站制作教程&#xff0c;适用于苹果的ios系统&#xff0c;和android系…

大型网站服务器架构

一、服务器集群改善并发问题 使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时&#xff0c;不要企图去更换更强大的服务器&#xff0c;对大型网站而言&#xff0c;不管多么强大的服务器&#xff0c;都满足不了网站持续增长的业务需求…

修改 设置 vs.net 网站 调试 设为 起始页

很简单&#xff0c;右键网站项目&#xff0c;打开【属性&#xff08;R&#xff09;】&#xff0c;找到【web】选项卡&#xff0c;然后会看到右边有一个【启动操作】&#xff0c;设置为当前页即可。 见百度问题: http://zhidao.baidu.com/question/195134372.html?an0&si1 …

HTML的购买按钮添加,将shopify购买按钮添加到流星js网站

不知道最好的方法来连接流星js网站使用购买按钮购物。 要initializie的Shopify API - http://shopify.github.io/js-buy-sdk/ - 直接&#xff0c;我导入使用将shopify购买按钮添加到流星js网站meteor npm install --save shopify-buymeteor npm install --save shopify-promise…