我的项目经历了名称更改,导致使用ReSharper在整个解决方案中更改名称空间的名称。一切都编译得很好,但我的ASP.NET MVC视图不再看到任何继承的类。我已经更改了web.config和所有内容中的命名空间导入,并且我确定这些类存在。如果我引用完全限定的类名(Name.Space.ClassName),它们就可以工作。
为什么会发生这种情况,我该如何解决?
编辑:更多细节:
在重构之前,我有自定义视图页面,母版页和用户控件类:
SalesWeb.Mvc.Views.SalesWebViewPage
SalesWeb.Mvc.Views.SalesWebMasterPage
SalesWeb.Mvc.Views.SalesWebUserControl
重构后:
Wasabi.SalesPortal.Mvc.Views.SalesPortalViewPage
Wasabi.SalesPortal.Mvc.Views.SalesPortalMasterPage
Wasabi.SalesPortal.Mvc.Views.SalesPortalUserControl
在web.config中,重构之前:
<configuration>
<system.web>
...
<pages ...>
...
<namespaces>
...
<add namespace="SalesWeb.Mvc.Views" />
</namespaces>
</pages>
</system.web>
</configuration>
后:
<configuration>
<system.web>
...
<pages ...>
...
<namespaces>
...
<add namespace="Wasabi.SalesPortal.Mvc.Views" />
</namespaces>
</pages>
</system.web>
</configuration>
我还在每个视图,母版页和用户控件上更改了Inherits属性。但是,在尝试访问MVC应用程序时,它抱怨无法找到 SalesPortalMasterPage ,但我绝对肯定它存在,因为我在将其称为时没有任何问题Wasabi.SalesPortal.Mvc.Views.SalesPortalMasterPage
答案 0 :(得分:1)
尝试清理bin目录并进行重建。有时一个较旧的dll会在bin文件夹中徘徊并弄乱你的引用/命名空间。
答案 1 :(得分:0)
当命名空间与保存视图的命名空间不同时,我遇到类似的问题。我的问题是,当我使用强类型视图引用不在网站命名空间中的类时,如果在视图本身中定义它,它就无法识别它。我的解决方案是为每个视图创建一个代码隐藏文件,并在那里定义类(以便它在同一名称空间中)并使视图继承自代码隐藏类。我意识到这是做旧的方法(而不是推荐),但这是我发现的唯一有效的方法。我偶然发现它是因为我在默认情况下创建代码隐藏之前使用版本创建的视图仍然有效,而没有代码隐藏创建的视图无法编译。您可能想尝试这样做以查看它是否可以解决您的问题。
我在Codeplex上报告了这个问题,顺便说一句。
编辑:根据您的评论,您可能没有遇到与我相同的问题。您可能需要检查项目中的程序集名称(和默认名称空间)是否已更新。问题可能是程序集名称与命名空间不匹配。