Aquí está el escenario. He extendido MvcWebRazorHostFactory para que pueda hacer un poco de magia de vista adicional en el momento de la compilación. La magia exacta no importa.Obtenga Visual Studio para resaltar la sintaxis de Razor con un host personalizado. FactoryType
La inscripción en mis ~ \ views \ Web.config se ve así:
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace" />
Hay al montaje apropiado en el proyecto, una copia de la asamblea en una carpeta \ lib, y he confirmó que se copió en \ bin como se esperaba. Además, la magia de vista real sucede cuando se construyen vistas, por lo que ASP.NET sí mismo está encontrando todo.
Lo que no funciona en Visual Studio (2012) 's Razor Resaltado de sintaxis.
arriba es una instantánea de cómo falla el resaltado de sintaxis. Como regla, no se puede encontrar nada que no se encuentre en un espacio de nombre directamente @using
'd (y, por lo tanto, obtiene el subrayado rojo ondulado) y la directiva @model
no funciona. Esto apunta a algunos problemas para obtener nuestro automatically included namespaces en el Web.config.
La información sobre herramientas para el error en @model
es "El nombre 'modelo' no existe en el contexto actual".
A través de la prueba y error He reducido la causa raíz a la sección de configuración de host
anterior, aunque tenemos algunos otros ajustes alrededor de Razor (un pageBaseType personalizado por ejemplo) es esa línea que rompe todo.
cosas que he intentado hasta ahora:
- fuerte nombrar el conjunto
- Instalación del conjunto de los GAC
- This page consejos en este siendo necesario.
Cuando nombrado fuertemente mis ~ \ views \ Web.config terminó pareciéndose así:
<host factoryType="StackExchange.MyNamespace.MyFactory, StackExchange.MyNamespace, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b61d663b67b05bd2" />
I comprobado la versión, Cultura y PublicKeyToken contra el GAC utilizando "gacutil -l ".
Supongo que otro posible punto de falla es el propio GAC, ya que hay toneladas de versiones .NET en mi caja. Tanto el ensamblado como el sitio web están diseñados con .NET 4.5 (ambos hacen referencia a MVC 4, Razor 2, etc.). La ruta al gacutil
que he estado usando durante la depuración es Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe
.
De vez en cuando, durante el proceso de aventar una causa raíz, recibía un mensaje de error con el siguiente mensaje: "StackExchange.MyNamespace.MyFactory no se pudo encontrar" en la primera línea de una vista. El subrayado estaría en el color "Otro error" (Púrpura en el Tema Oscuro VS2012). No pude reproducir eso de manera confiable, así que no puedo obtener una captura de pantalla.
Así que mi pregunta es, ¿alguien sabe cómo obtener Visual Studio (2012 nuevo) para manejar adecuadamente la maquinilla de afeitar de vistas con una fábrica de host personalizado?
Mi mejor conjetura actual es hacer reemplazos Web.config realmente hacky, así que tengo una configuración mientras edito y otra mientras se depura. Aunque no soy fanático de esa idea.
Parece que esto debería funcionar, y que Visual Studio simplemente está teniendo problemas para encontrar algo que necesita. Simplemente no sé lo que es eso.
Actualización después de un poco más de experimentación.
Tengo más desarrolladores para reproducir que es el <host pageFactoryType="...">
, incluso en una aplicación vanilla MVC4 (los ejemplos anteriores son, algo obvio, de la solución StackOverflow, que podría haber tenido algún cruft).
Hemos encontrado un trabajo, sin embargo, es comprar una licencia ReSharper. No es un gran (o barato) trabajo, pero un trabajo de todos modos.
Con ReSharper instalado todo funciona con una advertencia. Si tiene un registro personalizado <pages pageBaseType="...">
, el tipo debe estar en el mismo proyecto, o si no obtiene intellisense para la referencia @this.Model
(sin embargo, la directiva @model
funciona).
Más actualizaciones.
Parece que un no-op HostFactory (uno que se extiende MvcRazorHostFactory pero no define ningún método o contener cualquier otro código) funciona bien si que nombre seguro e instalarlo en la GAC. Creo que estaba usando el GAC incorrecto al probarlo antes, pero (con algunos estímulos externos) pude hacerlo funcionar usando el gacutil explícitamente x64.
Ahora el problema es averiguar qué pasa con mi fábrica de host en particular; más detalles llegando a medida que son descubiertos.