[英]Get Visual Studio to highlight Razor syntax with a custom host factoryType
在这种情况下,我扩展了MvcWebRazorHostFactory,以便在构建时可以做一点额外的视图魔术。 确切的魔术并不重要。
我的〜\\ Views \\ Web.config中的注册如下所示:
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace" />
在项目中有适当的程序集,在\\ lib文件夹中有该程序集的副本,我已经确认它已按预期复制到\\ bin中。 此外,构建视图时确实发生了真正的视图魔术,因此ASP.NET本身实际上可以找到所有内容。
在Visual Studio(2012)的Razor 语法突出显示中不起作用。
上面是语法突出显示如何失败的快照。 通常,找不到在名称空间中直接@using
的任何内容(并因此获得红色波浪状下划线),并且@model
指令不起作用。 这表明在Web.config中获取我们自动包含的名称空间有些麻烦。
@model
上@model
错误的工具提示是“名称'model'在当前上下文中不存在”。
通过反复试验,尽管我们对Razor进行了其他一些调整(例如自定义pageBaseType ),但我还是将上述问题的根源缩小到上述host
配置部分,但这一行打破了一切。
到目前为止我尝试过的事情:
当强命名后,我的〜\\ Views \\ Web.config最终看起来像这样:
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b61d663b67b05bd2" />
我使用“ gacutil -l”对照GAC检查了Version,Culture和PublicKeyToken。
我想另外一个可能的失败点是GAC本身,因为我的盒子上有很多.NET版本。 程序集和网站都使用.NET 4.5构建(均引用MVC 4,Razor 2等)。 调试时一直使用的gacutil
的路径是Program Files (x86)\\Microsoft SDKs\\Windows\\v8.0A\\bin\\NETFX 4.0 Tools\\gacutil.exe
。
有时,在我对根本原因进行风选期间,在视图的第一行会收到一条错误消息,提示“找不到StackExchange.MyNamespace.MyFactory”。 下划线将为“其他错误”颜色(VS2012 Dark Theme中为紫色)。 我无法可靠地重现该图像,因此无法获取屏幕截图。
所以我的问题是,有人知道如何让Visual Studio(2012年再次提供)以使用自定义宿主工厂正确处理Razor视图吗?
我目前对修复的最佳猜测是对Web.config进行了一些真正的修改,因此在编辑时有一个配置,在调试时有一个配置。 确实不是那个想法的拥护者。
看来这应该可行,而Visual Studio只是在麻烦地寻找它需要的东西。 我只是不知道那是什么。
经过更多试验后进行更新。
我有更多的开发人员来重现它是<host pageFactoryType="...">
,包括在原始MVC4应用程序中(上面的示例在某种程度上显然来自StackOverflow解决方案;这可能有些不足)。
不过,我们已经找到解决方法,那就是购买ReSharper许可证。 不是很好的(或便宜的)解决方案,但是仍然需要解决。
安装了ReSharper后,所有操作都需要注意。 如果您具有自定义的<pages pageBaseType="...">
注册,则该类型必须位于同一项目中,否则您不会获得@this.Model
引用的智能提示(尽管@model
指令有效)。
更多更新。
如果您强命名它并将其安装在GAC中,则它看起来像无操作HostFactory(扩展MvcRazorHostFactory但不覆盖任何方法或包含任何其他代码的HostFactory)工作正常。 我相信我在较早测试时使用的是错误的GAC,但是(使用一些外部测试)能够使用显式的x64 gacutil使它正常工作。
现在的麻烦是弄清楚我的主机厂出了什么问题。 发现更多细节。
与Microsoft进行一些讨论之后,我们找到了此问题的根本原因。
根本错误是自定义factoryType中的MVC3引用,尽管项目(及其周围的所有内容)都是MVC4 。
综上所述,要使Visual Studio IntelliSense在具有自定义<host factoryType>
.cshtml文件中工作:
请注意,在安装到GAC中之后,需要重新启动Visual Studio,仅重新加载解决方案(通常)是不够的。 我们还发现,某些(但不是全部)ReSharper安装需要清除其缓存,以便安全地清除缓存。
向驻留在GAC中的程序集添加引用时,Visual Studio不会默认将其复制到您的输出目录,这可能对您有用,但给我们带来了麻烦。 您可以在引用的属性中进行更改。
此外,如果您的自定义工厂引发任何异常,Visual Studio 还会为您提供一些错误消息(我无法可靠地重现“其他错误”紫色下划线); 除了可能在其构造函数中(这似乎有点不一致)。
在这种情况下,您无法获得帮助的情况就是类型本身存在严重问题。 事情在运行时起作用只是一个巧合(我们正在玩的接口在MVC3和MVC4之间没有发生变化,其余部分则使用了弱命名)。
*如果您像我们一样并安装了MVC beta 1至4,请在此步骤中注意PEBKAC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.