Jar*_*ttV 47 asp.net-mvc intellisense autocomplete razor asp.net-mvc-3
我们有一个模块化的架构,我们在一个单独的项目(类库)中有一些视图(cshtml)文件.我们怎样才能得到语法高亮和 当项目不是MVC项目时,自动完成工作?
请注意,类库包含控制器,视图,模型等.它只是没有正常mvc项目所具有的web.config,global.asax等.
除了如此重要的模型之外,intellisense适用于所有事物:

使用MVC3 RTM,如果将鼠标悬停在模型上,您现在可以获得更好的错误消息:
C:\ ...\Index.cshtml:ASP.NET运行时错误:没有为扩展名".cshtml"注册的构建提供程序.您可以在machine.config或web.config中的<compilation> <buildProviders>部分注册一个.确保具有BuildProviderAppliesToAttribute属性,该属性包含值"Web"或"全部".
所以我补充说:
<compilation>
<assemblies>
<add assembly="System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
<buildProviders>
<add
extension=".cshtml"
type="System.Web.WebPages.Razor.RazorBuildProvider, System.Web.WebPages.Razor"/>
</buildProviders>
</compilation>
Run Code Online (Sandbox Code Playgroud)
然后在添加构建提供程序后,将显示以下错误消息:
C:\ ...\Index.cshtml:ASP.NET运行时错误:无法加载文件或程序集"System.Web.WebPages.Razor"或其依赖项之一.该系统找不到指定的文件.(C:\ ...\machine.config第259行)
Dee*_*pak 49
这篇文章的webconfig 将有效.我在下面复制了它(后代):
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
<system.web>
<compilation targetFramework="4.0">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</assemblies>
</compilation>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Oma*_*mar 12
对于Visual Studio 2012/ASP.NET MVC 4,您需要更新程序集版本并添加<add key="webpages:Version" value="2.0.0.0" />到appSettings.这是我的Web.config看起来像:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
</appSettings>
<system.web>
<compilation targetFramework="4.5">
<assemblies>
<add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我遵循了Jammer的建议,并记录了我认为是最小的一系列操作,以使项目适合作为ASP.NET MVC4类库项目.这是在Visual Studio 2012 Update 4中完成的,目标是VB.Net.如果有机会,我可能稍后会包含在Visual Studio 2013中执行类似操作的文档.以下是我采取的行动:
packages具有更新版本的参考文件的目录是项目的一部分).App_Start文件夹App_Data文件夹和任何其他空文件夹(我的Mercurial历史记录没有使这个可见,所以我将从记忆中去).Global.asaxGlobal.asax.vbWeb.config根目录中的文件和依赖项Web.Debug.config和Web.Release.config文件.(不要不删除Web.config从浏览文件夹.)Web.configViews文件夹中的文件中删除以下部分:
appSettingssystem.websystem.webServer<add namespace="System.Web.Mvc.Ajax" />和<add namespace="System.Web.Routing" />packages目录并具有Copy Local和Specific Version设置为的特定于版本的引用True).
System.Web.EntitySystem.Web.ApplicationServicesSystem.ComponentModel.DataAnnotationsSystem.Data.DataSetExtensionsSystem.Web.ExtensionsSystem.Web.Extensions.DesignSystem.Xml.LinqSystem.Web.AbstractionsSystem.Web.RoutingSystem.ConfigurationSystem.Web.ServicesSystem.EnterpriseServicesMicrosoft.Web.Infrastructure (1.0.0.0)*Microsoft.Web.Mvc.FixedDisplayModes (1.0.0)*Newtonsoft.Json (4.5.11)*System.Net.Http (2.0.20710.0)*System.Net.Http.Formatting (4.0.20710.0)*System.Net.Http.WebRequest (2.0.20710.0)*System.Web.Helpers (2.0.20710.0)*System.Web.Http (4.0.20710.0)*System.Web.Http.WebHost (4.0.20710.0)*System.Xml.LinqSystem.Collections.SpecializedSystem.ConfigurationSystem.Web.CachingSystem.Web.Mvc.AjaxSystem.Web.RoutingSystem.Web.SessionStateSystem.Web.SecuritySystem.Web.ProfileSystem.Web.UISystem.Web.UI.WebControlsSystem.Web.UI.WebControls.WebPartsSystem.Web.UI.HtmlControlspackages.config:
这让我有以下几点:
Copy Local并Specific Version设置为True):
Controllers 文件夹包含 CustomUIController.vbModels 文件夹包含 CustomUIModel.vbViews包含CustomUI文件夹的文件夹Index.vbhtmlWeb.config文件在Views文件夹中.请参阅下面的内容.packages.config文件在项目的根目录中.请参阅下面的内容.我的文件内容如下:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Html" />
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.AspNet.Mvc" version="4.0.20710.0" targetFramework="net40" />
<package id="Microsoft.AspNet.Razor" version="2.0.20715.0" targetFramework="net40" />
<package id="Microsoft.AspNet.WebPages" version="2.0.20710.0" targetFramework="net40" />
</packages>
Run Code Online (Sandbox Code Playgroud)
Imports System.Web.Mvc
Public Class CustomUIController
Inherits Controller
Public Function Index() As ActionResult
Return View()
End Function
End Class
Run Code Online (Sandbox Code Playgroud)
Public Class CustomUIModel
Public Property Name As String
Public Property Value As Decimal
End Class
Run Code Online (Sandbox Code Playgroud)
@ModelType CustomTemplate.CustomUIModel
@Html.LabelFor(Function(m) m.Name)
Run Code Online (Sandbox Code Playgroud)
在这一点上,我能够使用Intellisense协助我.vbhtml视图和.vb类,构建项目,然后只将视图复制到主应用程序的已部署Views文件夹(在相应的子目录中),以及项目的主输出DLL到主应用程序的已部署bin目录(依赖DLL文件已经存在).
编辑:
在另一个系统上执行该过程以验证它以及它如何适用于.NET 4.5和VS 2013之后,我注意到以下内容:
System.Web.DynamicData可以删除引用.bin和obj文件夹,自定义项目的输出,重新加载的解决方案,将光标放在LabelFor在Index.vbhtml文件,然后按F12键查看是否将您带到对象浏览器.由于新版本,包文件是不同的:
<packages>
<package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net45" />
</packages>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32770 次 |
| 最近记录: |