我制作了一个模块化应用程序,每个模块都是一个单独的项目,它们的外观与 MVC 区域相似。
我实现了一个自定义WebViewPage
,但即使在将指针从web.config
后面删除为默认值之后,智能感知仍然无法正常工作。
在我的剃刀视图的第一行:
@model IEnumerable<Module2.Models.TestModel>
我收到警告:
xxx\Module2\Views\Shared\TestModelTable.cshtml:ASP.NET 运行时错误:在类型 WebActivator.ActivationManager 上运行的预应用程序启动初始化方法引发异常,并显示以下错误消息:调用目标已引发异常.. xxx\Module2\Views\Shared\TestModelTable.cshtml
和错误:
当前上下文 xxx\Module2\Views\Shared\TestModelTable.cshtml 中不存在名称“模型”
然后每次我尝试引用模型时都会出现错误:
无法从用法中推断方法“System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions.Expression>)”的类型参数。尝试明确指定类型参数。xxx\Module2\Views\Shared\TestModelTable.cshtml 26 14 模块2
此外,如果我添加ViewBag.Title
到视图中,我会收到此错误:
找不到编译动态表达式所需的一种或多种类型。您是否缺少参考?xxx\Module2\Views\Shared\TestModelTable.cshtml
我会假设 Web 配置存在问题,但它们是在 mvc 区域中找到的标准 Web 配置(我删除了 custom WebPageView
)
我尝试在每个模块中创建的每个视图都会发生这种情况,但是主应用程序工作正常。结果,我尝试将 webconfigs 从主应用程序复制到模块,但仍然有很多错误。
2012 年 6 月 12 日更新
在修复 RazorBuildProvider 的实现以处理模块后,应用程序现在可以成功呈现强类型视图。然而,智能感知仍然呈现这些错误。我怀疑该@module...
行的第一个错误是罪魁祸首,它阻止了编辑器加载强类型模型所需的信息。
2012 年 6 月 12 日更新
通过消除过程,我发现 ninject 的 PreApplicationStartMethod 是罪魁祸首。当该方法调用 RegisterServices 时,我的模块加载器被调用,并在其中某处引发错误。[assembly: WebActivator.PreApplicationStartMethod(typeof(Frontline.App_Start.NinjectWebCommon), "Start")]
为了获得更好的解决方案,我需要弄清楚如何正确调试此错误,我找不到任何东西,所以我在 SO Debugging Visual Studio editor exceptions上发布了另一个(更通用的)问题
我还将发布我的 hacky 修复作为答案