0

我制作了一个模块化应用程序,每个模块都是一个单独的项目,它们的外观与 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 修复作为答案

4

1 回答 1

0

所以我无法解决问题的根源,但我有一个快速解决方案。

如果名称中有visual studio,我将在我的模块加载方法期间终止该进程:

if (System.Diagnostics.Process.GetCurrentProcess().ProcessName.Contains("VisualStudio"))
   return;
于 2012-12-06T01:32:27.830 回答