更改时重新编译
对动态编译文件的任何更改都会自动使文件的缓存编译程序集无效,并触发所有受影响的资源的重新编译。 下次向代码发出请求时,ASP.NET 会识别该代码是否已更改,并重新编译 Web 应用程序的受影响的资源。 此系统使您能够用最少的编译处理开销快速开发应用程序。 (请注意,根据对资源进行的更改,结果可能是需要重新编译单个页面甚至重新编译整个网站。) 
http://msdn.microsoft.com/zh-cn/library/ms366723.aspx
看微软的描述是只要改变过cs文件后再次访问页面就会动态编译并且显示最新的更改,但实际情况是,有时候更改某一个页面的cs文件后会立刻生效,但大部分时候大部分页面更改后还是显示未改前的页面。这是怎么回事?

解决方案 »

  1.   

    实时生效没问题,每编译一次,.dll文件修改日期为当前日期。程序,清理解决方案,重新编译解决方案。浏览器,一般都在工具,选择中删除缓存。手动设置缓存是否保留.
      

  2.   

    在调试状态下整个web层所有的更改都不需要停止调试,并且更改即时有效。确保你在调试状态下,并且浏览器缓存全部清除。。
      

  3.   

    呵呵,这个看你是怎么测试的。如果是发布过的项目,他必须重新编译发布如果是非发布项目,可以直接修改并动态编译。编译的结果在C:\WINDOWS\Microsoft.NET\Framework\相关net框架版本\Temporary ASP.NET Files下比如net2在 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 路径下
    ps:另外为了即时看到效果,建议把ie的 internat设置 里面的 临时缓存选项--设置为 每次访问时更新。另外有些项目设置了依赖缓存,这时候调试页面也有可能出现不即时更新的状态。
      

  4.   

    是发布过的项目,但动态编译的能作用在发布的站点上的吧,这个我测试过呀。因为我站点上前台后台的代码都有,我直接在load事件里面添加一句Response.Write("123"),那么刷新一下网页的时候123就显示出来了。这就是一个发布过的站点。但在这个页面里面改动的有效,去其他的页面就是无效的了。不止这一个,我们公司的网站也是直接把代码都扔到服务器上去的,我们想改的时候只要去改了相应的代码就好了,完全不需要编译。看起来的样子倒跟是用解释性的语言写的一样了。那个网站是任何一个页面改了都有效。