mvc视图的编译,是IIS编译的吗?为什么不能在发布时就编译完毕?!
在视图里用@this.GetType().Assembly.Location可以看到在c盘里的一个文件夹里生产了一堆dll
一般是:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\1d712dc2\e3b29065\App_Web_cy3xeufi.dll
这显然,不是我用FTP上传的。
阿里云说我的mvc网站,一个请求,CPU处理长达13428秒!这是他们IIS列队里的信息,我想了好久,考虑只有一种可能:(我的系统是直接与微信交互XML数据的)就是在我没有加载视图,直接返回字符串,(即没用浏览器,访问网站。)服务器在编译视图的时候,消耗了大量时间!!
我的另一个帖子,详尽描述了这个问题:http://bbs.csdn.net/topics/390872823
mvc 按理说,网站在发布的时候,访问哪个控制器的方法,返回哪个视图,就可以确定了,为什么选择在第一次访问网站时,才去生成视图的dll呢?这不是加大了服务器的负担了吗?即使只生产一次!
第一次的时候去生成dll是为了web应用的修改方便,比如,可能你只是修改一个很小的字符、布局,是否要重新发布呢?能在cshtml中直接就修改完成,多快?
至于你的要求,也不是不可以,通过vs的项目发布功能发布就可以达到目的。在配置发布的时候,有个选项:在发布期间预编译。你可以对每个CSHTML配置为单独的DLL,也可以所有的CSHTML配置为一个DLL,或由系统自定义。
只是这个发布,有时可能需要使用“删除已发布的项”。
按你说的,发布了一下,可是在网页上看到的还是 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\1d712dc2\e3b29065\App_Web_cy3xeufi.dll 暂时不能确定是预编译的,预编译他的dll应该在bin目录下吧?
@钢的锅: 你这个问题我还真没研究过是否会复制还是咋的。
但是,这样后,性能是否提升了?
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\ 这个目录里是VS变异过程中产生的临时文件吧,我又一次编译时,系统蓝屏,之后一直报各种莫名其妙的DLL错误,后来查到,是编译过程中产生的临时文件未写完,导致下一次编译时出错,将这个目录中的文件都删掉,问题就解决。
至于 为什么会这么长时间,不太清除。