公司内部的一个网站,Aspx的,最近莫名其妙的出现一个问题:
file 'soLog.aspx' has not been pre-compiled,and cannot be requested.
这个问题只有在网站发布到服务器之后才会出现,本地一切正常,但不是每一个页面都有这一个问题,部分页面可以正常使用,于是把本地的网页重新编译之后再次发布到服务器,结果还是不行,一会儿是页面A有这个问题,一会儿是页面B有这个问题,网上都说是由于少了一些DLL文件或者是没有引用的缘故,可是我项目里面根本都没有用到什么第三方控件,都是MS自带的东西;于是我把服务器上面虚拟目录里面的Bin文件全部干掉,然后我重新发布项目,悲催的是问题依旧。
仔细检查了服务器上面的虚拟目录,发现Bin里面有一些这样的文件“页面名称.aspx.cdcab7d2.compiled”,每一个页面对应这么一个文件,猜想应该是发布网站之后生成的编译文件,是不是这个文件引起异常的呢?不试一下也不知道,于是我在发布网站的时候勾选了“允许更新此编译站点”的选项,如下图:
然后重新编译,重新发布网站,依然是将服务器上面所有的Bin文件全部杀掉,发布之后发现没有aspx.cdcab7d2.compiled这种文件了,为了防止出现其它的异常,我把应用程序池重启了一下,刷新页面,意想不到的结果出来了----OK了。难道真的是这个原因吗?
但是这样做也有问题,如果勾选了“允许更新此编译站点”的选项,那么发布的网站安全性非常差,除了所有的CS文件编译成为一个DLL文件之外,其它的文件和原来的没有任何变化,原来是什么现在就是什么,通过记事本打开可以看到里面的代码以及HTML代码等,我们可以将两个文件打开互相比较一下,
这个文件是以“不允许更新此编译站点”的方式发布之后的:
这个文件是以“允许更新此编译站点”的方式发布之后的:
两者的区别显而易见,以“允许更新此编译站点”的方式发布之后网站的安全无法保障,另外效率也会比较低,虚拟目录里面的.aspx.cdcab7d2.compiled文件也都没有了,也就是没有预编译,没有预先生成,每次需要的时候临时编译页面,访问第一次会很慢,但是第二次...第三次...就很快了。但是我测试了很多次这种做法确实可以解决“file 'soLog.aspx' has not been pre-compiled,and cannot be requested.”的问题,这种方式确实有很多的隐患,偶尔临时用一下以解燃眉之急。