Kev*_*ose 10 c# razor asp.net-mvc-4 visual-studio-2012
这是场景,我已经扩展了MvcWebRazorHostFactory,所以我可以在构建时做一些额外的视图魔术.确切的魔法并不重要.
我的〜\ Views\Web.config中的注册如下所示:
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace" />
Run Code Online (Sandbox Code Playgroud)
在项目中有适当的程序集,在\ lib文件夹中有一个程序集的副本,我已经确认它已按预期复制到\ bin.此外,实际视图魔术确实发生在构建视图时,因此ASP.NET本身实际上正在查找所有内容.
什么在Visual Studio(2012)的Razor 语法高亮显示中不起作用.

以上是语法突出显示失败的快照.通常,不能直接@using找到名称空间中的任何内容(因此得到红色波浪线下划线)并且该@model指令不起作用.这表示在Web.config中获取自动包含的命名空间时遇到一些麻烦.
错误的工具提示@model是"名称'模型'在当前上下文中不存在".
通过反复试验,我已经将根本原因缩小到上面的host配置部分,虽然我们对Razor(例如自定义的pageBaseType)进行了一些其他的调整,但是这一行打破了一切.
到目前为止我尝试过的事情:
当强烈命名我的〜\ Views\Web.config最终看起来像这样:
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b61d663b67b05bd2" />
Run Code Online (Sandbox Code Playgroud)
我使用"gacutil -l"检查了GAC的Version,Culture和PublicKeyToken.
我认为另一个可能的失败点是GAC本身,因为我的盒子上有很多.NET版本.程序集和Web站点都是使用.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黑暗主题中的紫色).我无法可靠地重现它,所以我无法获得截图.
所以我的问题是,有没有人知道如何让Visual Studio(2012再次)使用自定义主机工厂正确处理Razor Views?
我目前对修复的最佳猜测是做一些非常hacky的Web.config替换,所以我在编辑时有一个配置,在调试时有另一个配置.真的不是这个想法的粉丝.
看起来这应该可行,并且Visual Studio只是在找到它需要的东西时遇到麻烦.我只是不知道那是什么.
经过一些实验后更新.
我有更多的开发人员重现它<host pageFactoryType="...">,包括在一个vanilla MVC4应用程序中(上面的例子显然是来自StackOverflow解决方案;这可能有些瑕疵).
我们找到了一个解决办法,就是购买ReSharper许可证.不是一个伟大的(或廉价的)工作,但一个工作无所不在.
安装ReSharper后,一切都有一点需要注意.如果您有自定义<pages pageBaseType="...">注册,则该类型必须位于同一项目中,或者您没有获得intellisense以供@this.Model参考(@model尽管该指令有效).
更多更新.
看起来像一个无操作的HostFactory(一个扩展MvcRazorHostFactory,但不覆盖任何方法或包含任何其他代码),如果你强名它并将其安装在GAC中,它可以正常工作.我相信我之前在测试时使用了错误的GAC,但是(有一些外部刺激)能够使用明确的x64 gacutil来使用它.
现在麻烦的是弄清楚我的特定主机工厂有什么问题; 他们被发现后会有更多细节.
经过与微软的一些讨论,我们发现了这个问题的根本原因.
根错误是自定义factoryType中的MVC3引用,尽管项目(及其周围的所有内容)都是MVC4.
总结一下,使用自定义的Visual Studio IntelliSense在.cshtml文件中工作<host factoryType>:
请注意,安装到GAC后需要重新启动Visual Studio,只需重新加载解决方案(通常)就不够了.我们还发现一些(但不是全部)ReSharper安装需要清除缓存,以便安全地清除缓存.
添加对驻留在GAC中的程序集的引用时,一次轻微的操作是默认情况下Visual Studio不会将其复制到输出目录,这可能对您有用,但对我们造成了问题.您可以在引用的属性中更改此设置.

此外,如果您的自定义工厂抛出任何异常,Visual Studio 将为您提供一些错误消息("其他错误"紫色下划线,我无法再次可靠地重现); 除了它的构造函数(似乎有点不一致).
在你没有得到帮助的地方,我们所处的情况是,类型本身存在严重问题.事情在运行时起作用是巧合(我们正在玩的接口在MVC3和MVC4之间没有变化,其余的弱命名也是如此).
*如果您喜欢我们并安装了MVC beta 1到4,请在此步骤中注意PEBKAC.
| 归档时间: |
|
| 查看次数: |
1960 次 |
| 最近记录: |