我们在使用asp.net进行网站开始,都会aspx页面。
在客户端请求aspx页面。将动态编译aspx页面和aspx.cs代码文件。第一次编译之后。将会缓存编译后的资源,而之后的请求,
就读取缓存,不在编译。这个是大家都知道的。
大家在开发的时候都会使用dll,dll就是已经编译好的,都放在bin文件夹下。
那么动态编译的aspx页面和cs代码文件编译后的dll放在那里呢?
放在服务器上,当编译web程序时,编译的代码会放在C:WindowsMicrosoft.NETFramework版本号Temporary ASP.NET Filesroot 这个目录下的某个文件夹中。
更改时重新编译
更改时重新编译,当我们在本机更改了一个aspx页面。拷贝到服务器上。这就会导致重新编译,下面为msdn上的解释。
对动态编译文件的任何更改都会自动使文件的缓存编译程序集无效,并触发所有受影响的资源的重新编译。下次向代码发出请求时,ASP.NET 会识别该代码是否已更改,并重新编译 Web 应用程序的受影响的资源。此系统使您能够用最少的编译处理开销快速开发应用程序。(请注意,根据对资源进行的更改,结果的范围可能从重新编译单个页面到重新编译整个网站。)
重新编译顶级项 这里要给喜欢经常更改dll的朋友提个醒,当我们要更改dll的代码的时候。比如项目引用了某个dll,现在这个dll需要修改,我们打开vs重新更改这个类库,然后得到了最新的dll,再把新dll拷贝到服务器上,这里dll属于依赖项。如果更改了依赖项,那么在访问程序时,就会重新编译顶级。下面请看msdn上的说明:
在第一次对应用程序发出请求时,ASP.NET 按特定顺序编译文件。要编译的第一批项称为顶级项。在第一次请求之后,仅当依赖项更改时才会重新编译顶级项。
顶级项包括 App_GlobalResources 文件夹、App_WebResources 文件夹、配置文件属性、App_Code 文件夹和 Global.asax 文件。编译顶级项之后,ASP.NET 将编译其他项。这些项包括 App_LocalResources 文件夹、单个 ASP.NET 页(.aspx 文件)、ASP.NET 用户控件(.ascx 文件)、ASP.NET HTTP 处理程序(.ashx 文件)和 ASP.NET HTTP 模块(.asmx 文件),以及主题、母版页和其他源文件。
最后,其实无论怎么样,程序都要进行最后一次编译,大家都知道,.net会将代码编译成IL代码,再有CLR把IL代码编译成机器代码执行。所以最后一步编译成机器代码是肯定逃不掉的。我们上面说的只是第一步编译成IL代码的。
最后大家可以去做测试:在本地用vs新建一个web程序,然后C:WindowsMicrosoft.NETFramework版本号Temporary ASP.NET Files到这个文件夹。然后你运行网站,你可以看到Temporary ASP.NET Files文件夹的修改时间就会改变。也可以把root下文件全部删除,当你在一次访问站点的时候。你会发现又会多一个文件夹。