我已经制作了一个模块化应用程序,每个模块都是一个单独的项目,它们与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
错误:
当前上下文中不存在名称“model”xxx \ Module2 \ Views \ Shared \ TestModelTable.cshtml
然后每次我尝试引用模型时都会出现错误:
方法'System.Web.Mvc.Html.DisplayExtensions.DisplayFor(System.Web.Mvc.HtmlHelper)的类型参数, System.Linq.Expressions.Expression&GT)” 无法从使用中推断出来。尝试指定类型参数 明确。 xxx \ Module2 \ Views \ Shared \ TestModelTable.cshtml 26 14 Module2
此外,如果我向视图添加ViewBag.Title
,我会收到此错误:
找不到编译动态表达式所需的一种或多种类型。你错过了吗? 参考? XXX \单词数\视图\共享\ TestModelTable.cshtml
我认为网络配置存在问题,但它们是mvc区域中的标准网络配置(我删除了自定义WebPageView
)
我尝试在每个模块中创建的每个视图都会发生这种情况,但主应用程序运行正常。结果我试图将webconfig从主应用程序复制到模块,但我仍然有很多错误。
更新 6/12/12
在修复RazorBuildProvider的实现以处理模块后,应用程序现在可以成功呈现强类型视图。然而,intellisense仍然会产生这些错误。我怀疑@module...
行上的第一个错误是罪魁祸首,并阻止编辑器加载强类型模型所需的信息。
更新 6/12/12
通过消除过程,我发现ninject的PreApplicationStartMethod是罪魁祸首。当方法调用RegisterServices时,我的模块加载器被调用,并在那里的某处抛出错误。 [assembly: WebActivator.PreApplicationStartMethod(typeof(Frontline.App_Start.NinjectWebCommon), "Start")]
为了获得更好的解决方案,我需要弄清楚如何正确调试此错误,我找不到任何内容,所以我在SO Debugging Visual Studio editor exceptions上发布了另一个(更通用的)问题
我还会发布我的hacky修复作为答案
答案 0 :(得分:0)
所以我无法解决问题的根源,但我有一个快速修复。
如果名称中包含visual studio,我会在模块加载方法中终止该过程:
if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.Contains("VisualStudio"))
return;