visual una studio préstamo programa para net libros librerias libreria hacer crear como clases clase biblioteca asp agregar asp.net-mvc asp.net-mvc-3 razor autocomplete intellisense

asp.net mvc - studio - ¿Necesita el motor de vista de afeitar autocompletar para trabajar en una biblioteca de clase?



librerias de visual studio 2017 (5)

Tenemos una arquitectura modular donde tenemos algunos archivos de vistas (cshtml) en un proyecto separado (biblioteca de clases). ¿Cómo podemos obtener el resaltado de sintaxis y autocompletar para trabajar cuando el proyecto no es un proyecto MVC?

Tenga en cuenta que la biblioteca de la clase tiene controladores, vistas, modelos, etc. Simplemente no tiene el archivo web.config, global.asax, etc. que tendría un proyecto de mvc normal.

El intellisense funciona para todo menos para el modelo tan importante:

Con MVC3 RTM, si pasa el mouse sobre el Modelo, ahora puede obtener un mensaje de error mejor:

C: / ... / Index.cshtml: error de tiempo de ejecución de ASP.NET: no hay ningún proveedor de compilación registrado para la extensión ''.cshtml''. Puede registrar uno en la sección <compilation> <buildProviders> en machine.config o web.config. Asegúrese de que tiene un atributo BuildProviderAppliesToAttribute que incluye el valor ''Web'' o ''All''.

Así que agregué esto:

<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>

Luego, después de agregar el proveedor de compilación, aparece este mensaje de error:

C: / ... / Index.cshtml: Error de tiempo de ejecución de ASP.NET: No se pudo cargar el archivo o ensamblado ''System.Web.WebPages.Razor'' o una de sus dependencias. El sistema no puede encontrar el archivo especificado. (C: / ... / machine.config línea 259)


El webconfig de esta publicación funcionará. Lo he copiado a continuación (para la posteridad):

<?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>


He seguido la sugerencia de Jammer y estoy documentando lo que creo que es el conjunto mínimo de acciones para obtener un proyecto adecuado para servir como un proyecto de biblioteca de clase ASP.NET MVC4. Esto se hizo en Visual Studio 2012 Update 4, y estaba dirigido a VB.Net. Posteriormente, puedo incluir documentación para hacer algo similar en Visual Studio 2013 si tengo la oportunidad. Estas son las acciones que tomé:

  1. Cree un nuevo proyecto en blanco MVC4 con un directorio separado para la solución (para que pueda ver claramente que el directorio de packages con versiones actualizadas de los archivos de referencia es parte del proyecto).
  2. Agregue un controlador ficticio, vista y modelo para probarlo (lo que implica copiar el archivo DLL de salida y verlo en otra aplicación web después de compilar la biblioteca de clases).
  3. Eliminar los siguientes archivos del proyecto:
    • Toda la carpeta App_Start
    • Toda la carpeta App_Data y cualquier otra carpeta vacía (mi historial de Mercurial no lo hizo visible, así que me voy de la memoria).
    • Global.asax
    • Global.asax.vb
    • El archivo Web.config en la raíz y los Web.Debug.config dependientes Web.Debug.config y Web.Release.config . (No elimine Web.config de la carpeta Vistas).
  4. Elimine las siguientes secciones del archivo Web.config en la carpeta Vistas:
    • appSettings
    • system.web
    • system.webServer
    • También puede eliminar líneas <add namespace="System.Web.Mvc.Ajax" /> y <add namespace="System.Web.Routing" />
  5. Elimine las siguientes referencias del proyecto (* las referencias destacadas eran referencias específicas de la versión que ingresaron en el directorio de packages y tienen la Copy Local Specific Version Copy Local y Specific Version establecida en True ).
    • System.Web.Entity
    • System.Web.ApplicationServices
    • System.ComponentModel.DataAnnotations
    • System.Data.DataSetExtensions
    • System.Web.Extensions
    • System.Web.Extensions.Design
    • System.Xml.Linq
    • System.Web.Abstractions
    • System.Web.Routing
    • System.Configuration
    • System.Web.Services
    • System.EnterpriseServices
    • Microsoft.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) *
  6. Elimine las siguientes Importaciones de todo el proyecto de la configuración del proyecto:
    • System.Xml.Linq
    • System.Collections.Specialized
    • System.Configuration
    • System.Web.Caching
    • System.Web.Mvc.Ajax
    • System.Web.Routing
    • System.Web.SessionState
    • System.Web.Security
    • System.Web.Profile
    • System.Web.UI
    • System.Web.UI.WebControls
    • System.Web.UI.WebControls.WebParts
    • System.Web.UI.HtmlControls
  7. Elimine lo siguiente de packages.config :
    • <id del paquete = "Microsoft.AspNet.Mvc.FixedDisplayModes" version = "1.0.0" targetFramework = "net40" />
    • <package id = "Microsoft.AspNet.WebApi" version = "4.0.20710.0" targetFramework = "net40" />
    • <package id = "Microsoft.AspNet.WebApi.Client" version = "4.0.20710.0" targetFramework = "net40" />
    • <package id = "Microsoft.AspNet.WebApi.Core" version = "4.0.20710.0" targetFramework = "net40" />
    • <id del paquete = "Microsoft.AspNet.WebApi.WebHost" version = "4.0.20710.0" targetFramework = "net40" />
    • <package id = "Microsoft.Net.Http" version = "2.0.20710.0" targetFramework = "net40" />
    • <id del paquete = "Microsoft.Web.Infrastructure" version = "1.0.0.0" targetFramework = "net40" />
    • <package id = "Newtonsoft.Json" version = "4.5.11" targetFramework = "net40" />
  8. Elimine los siguientes subdirectorios de la carpeta de paquetes:
    • Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.0
    • Microsoft.AspNet.WebApi.4.0.20710.0
    • Microsoft.AspNet.WebApi.Client.4.0.20710.0
    • Microsoft.AspNet.WebApi.Core.4.0.20710.0
    • Microsoft.AspNet.WebApi.WebHost.4.0.20710.0
    • Microsoft.Net.Http.2.0.20710.0
    • Microsoft.Web.Infraestructura.1.0.0.0
    • Newtonsoft.Json.4.5.11

Esto me deja con lo siguiente:

  1. Un proyecto de biblioteca de clase VB.Net con .NET Framework 4 (aunque tenía la intención de que fuera 4.5, creo que cualquiera de los dos funciona).
  2. Las siguientes referencias .NET no predeterminadas (las referencias destacadas deben tener Copy Local Specific Version Copy Local y Specific Version establecida en True ):
    • System.Web
    • packages / Microsoft.AspNet.Mvc.4.0.20710.0 / lib / net40 / System.Web.Mvc.dll *
    • packages / Microsoft.AspNet.Razor.2.0.20715.0 / lib / net40 / System.Web.Razor.dll *
    • packages / Microsoft.AspNet.WebPages.2.0.20710.0 / lib / net40 / System.Web.WebPages.dll *
    • packages / Microsoft.AspNet.WebPages.2.0.20710.0 / lib / net40 / System.Web.WebPages.Deployment.dll *
    • packages / Microsoft.AspNet.WebPages.2.0.20710.0 / lib / net40 / System.Web.WebPages.Razor.dll *
  3. Las siguientes importaciones no predeterminadas:
    • System.Web
    • System.Web.Mvc
    • System.Web.Mvc.Html
  4. Los siguientes archivos de proyecto / estructura:
    • Carpeta de Controllers contiene CustomUIController.vb
    • Carpeta de Models contiene CustomUIModel.vb
    • Views carpeta Views contiene la carpeta CustomUI , que contiene Index.vbhtml
  5. Archivo Web.config en la carpeta Vistas. Vea a continuación el contenido.
  6. Archivo packages.config en la raíz del proyecto. Vea a continuación el contenido.

El contenido de mis archivos es el siguiente:

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.Html" /> </namespaces> </pages> </system.web.webPages.razor> </configuration>

packages.config

<?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>

CustomUIController.vb

Imports System.Web.Mvc Public Class CustomUIController Inherits Controller Public Function Index() As ActionResult Return View() End Function End Class

CustomUIModel.vb

Public Class CustomUIModel Public Property Name As String Public Property Value As Decimal End Class

Index.vbhtml

@ModelType CustomTemplate.CustomUIModel @Html.LabelFor(Function(m) m.Name)

En este punto, puedo trabajar con Intellisense ayudándome en las vistas .vbhtml y las clases .vb, compilar el proyecto, luego copiar solo las vistas a la carpeta de Views implementadas de la aplicación principal (en el subdirectorio apropiado), y la DLL de salida primaria del proyecto al directorio bin implementado de la aplicación principal (los archivos DLL dependientes ya están allí).

Editar:

Después de seguir el proceso en otro sistema para validarlo y cómo funciona para .NET 4.5 y VS 2013, he notado lo siguiente:

  1. Creo que olvidé mencionar que la referencia a System.Web.DynamicData se puede eliminar.
  2. En VS 2013 y / o .NET 4.5, algunas versiones cambian:
    • packages / Microsoft.AspNet.Mvc.4.0.30506.0 / lib / net40 / System.Web.Mvc.dll
    • packages / Microsoft.AspNet.Razor.2.0.30506.0 / lib / net40 / System.Web.Razor.dll
    • packages / Microsoft.AspNet.WebPages.2.0.30506.0 / lib / net40 / System.Web.WebPages.dll
    • packages / Microsoft.AspNet.WebPages.2.0.30506.0 / lib / net40 / System.Web.WebPages.Deployment.dll
    • packages / Microsoft.AspNet.WebPages.2.0.30506.0 / lib / net40 / System.Web.WebPages.Razor.dll
  3. No sé si ya lo mencioné suficientemente, pero las referencias a archivos DLL privados (Copy Local) deben establecerse en Copy Local, y / o tienen que usar la versión proporcionada en la carpeta de paquetes cuando creando un proyecto a partir de la plantilla MVC4. No sé por qué, pero las versiones .NET estándar (no privadas) no parecen funcionar, por lo menos en lo que respecta a Intellisense.
  4. La mejor forma de comprobar si las cosas siguen "OK" en lo que respecta al IDE es cerrar la solución, eliminar las carpetas bin y obj en la salida del proyecto personalizado, volver a cargar la solución, colocar el cursor en LabelFor en el índice .vbhtml file, y presione la tecla F12 para ver si lo lleva al Object Browser.

Debido a las nuevas versiones, el archivo de paquetes es diferente:

Packages.config

<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>


Muy bien, este es un tiro largo, pero me encontré con el mismo problema. ¿Estás usando JetBrains Resharper?

Resharper anula el motor Intellisense de VS pero no comprende la sintaxis de Razor. Simplemente tiene que decirle a VS que confíe en su propio intellisense en lugar de Resharper.

En VS2010, vaya a Resharper - Opciones - Intellisense - General. Luego, verifica el botón de radio de Visual Studio.

Funcionó muy bien para mí


Ninguna de las soluciones que pude encontrar en línea o en SO me solucionó esto.

Puede parecer un mazo para romper una nuez, pero creé un proyecto de aplicación MVC 4 en lugar de una biblioteca de clase y arranqué todo lo que no necesitaba. Intellisense y @model funcionan bien.


Para Visual Studio 2012 / ASP.NET MVC 4, debe actualizar las versiones de ensamblaje y agregar <add key="webpages:Version" value="2.0.0.0" /> a appSettings . Así es como se ve mi 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>