今天,由于我随手改了几个cs命名空间的名称。原来是LMSoft.Zhaopin,改为了LMSoft.Web。这是因为我的项目名称已经改为LMSoft.Web。原来的项目名称是LMSoft.Zhaopin。谁知编译后打开后台一个页面却出现了下面的错误:
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\43510009\83735f89\App_Web__popupmodal.cshtml.909e1be.ai6jub48.0.cs(28): error CS0234: The type or namespace name 'Zhaopin' does not exist in the namespace 'LMSoft' (are you missing an assembly reference?)
由于这种提示是临时文件出现的问题。我以为是缓存。然后把c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files底下的文件全删除了,还是有此问题。而且奇怪的是,后台有些页面有这个问题,有些页面没这样得问题。都是在cshtml文件上出的这个问题。后来我按照错误提示,打开popupmodal.cshtml这个文件。里面什么引用也没有。当时就懵了。这是怎么个情况。后来想了个笨办法,就是解决方案中的文件全部搜索,寻找LMSoft.Zhaopin,还真找到几个。其中在网站Views目录下的web.config也找到了相应的引用:
<pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> <add namespace="System.Web.Mvc.Ajax" /> <add namespace="System.Web.Mvc.Html" /> <add namespace="System.Web.Optimization"/> <add namespace="System.Web.Routing" /> <add namespace="LMSoft.Zhaopin" /> </namespaces> </pages>可是改掉后问题依旧。又找到几个这样得引用,但是改后都没什么效果。弄着弄着vs出现一个致命问题,这个问题几乎每天都要出现一次。就是点击某个目录或文件的时候就会出现,一出现。vs就停止工作。只能重启vs。这次又出现,我也怀疑是不是需要重启计算机,因为有时清理缓存也不行。需要重启电脑。于是就重启了下。但是重启后,打开网站首页也出现这个问题了。原来是没有的。
这次我点开了Show Complete Compilation Source详细的堆栈跟踪,发觉点有意思的现象。其中命名空间加载自上而下有几个这样得:
Line 12: namespace ASP { Line 13: using System; Line 14: using System.Collections.Generic; Line 15: using System.IO; Line 16: using System.Linq; Line 17: using System.Net; Line 18: using System.Web; Line 19: using System.Web.Helpers; Line 20: using System.Web.Security; Line 21: using System.Web.UI; Line 22: using System.Web.WebPages; Line 23: using System.Web.Mvc; Line 24: using System.Web.Mvc.Ajax; Line 25: using System.Web.Mvc.Html; Line 26: using System.Web.Optimization; Line 27: using System.Web.Routing; Line 28: using LMSoft.Zhaopin;
我猛然觉得在哪里似乎见过。后来想到是在web.config中。我看了下web.config中命名空间的顺序,和这个出错地方一样。难道是在加载页面的时候每个页面都要加载这些命名空间?觉得有可能。我把LMSoft.Zhaopin改为LMSoft.Web,这次首页没这个错误了。而且后台其他页面也没这个错误了。由于我知道网站底下有几个web.config文件。其中根目录下有一个。每个views目录下有一个,我又找了下,其中在网站根目录下的views目录中有LMSoft.Zhaopin,在areas目录下的views目录下也有个web.config。这两个都有这个namespaces节点。但是我发现根目录下没这个节点。后来又仔细看了namespaces节点的父节点。发觉是来自<system.web.webPages.razor>,那这应该是在cshtml文件加载的时候需要预加载这里面的命名空间的。
我又把这两个web.config文件中的LMSoft.Web改为LMSoft.Zhaopin,但是并没有出现这样得编译提示:
Server Error in '/' Application.
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.Compiler Error Message: CS0234: The type or namespace name 'Zhaopin' does not exist in the namespace 'LMSoft' (are you missing an assembly reference?)
Source Error:
Line 26: using System.Web.Routing;
Line 27: using System.Web.Optimization;
Line 28: using LMSoft.Zhaopin;
Line 29:
Line 30: |
这说明是有缓存的。当正确的时候它会一直缓存。我想是不是需要重启才能解决此问题。就都改为LMSoft.Zhaopin,然后重启,仍然不出现错误提示。那说明不是需要重启解决的。我又删除了c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files临时目录下的所有文件。打开网站首页,出现了像上面的错误提示。然后我更改了网站根目录下的views文件夹下的web.config。这次首页正确了。然后登录后台,因为后台是在areas目录下。它有单独的views目录。这次发行,后台也有这样得错误。然后我更改后台的views目录下的web.config文件。这次没错了。
总结下:
出现这种错误需要更改相应mvc views目录下的web.config文件。这种更改不需要重启电脑就能起作用。但是与Temporary ASP.NET Files下的缓存文件有关。一旦网站能正常浏览,再次把web.config文件的域名更改为错误,它不会即时起效。需要等缓存文件失效后才会报错