2012-06-18 25 views
9

Necesito poder utilizar una clase dentro de una plantilla T4, que residen en mi solución. Tengo una clase llamada Container en Container.cs. En mi plantilla de texto, quiero poder acceder a la clase Container. Alguna idea sobre cómo puedo hacer esto. Básicamente algo como esto:Usar clase dentro de una plantilla T4

<#@ template language="C#" #>

<# var container = new Container() #>

+0

Por favor, muestre su código –

Respuesta

15

En general, si necesita utilizar realmente la funcionalidad de la clase de contenedor en su plantilla, tendrá que cargar el ensamblado de que su proyecto es la construcción. Esto introduce una dependencia circular, ya que necesita una versión construida de su ensamblaje para regenerar el código que se va a incluir en ese ensamblaje, así que tenga en cuenta eso.

Si está utilizando VS2010 o superior, usted será capaz de utilizar algo como:

<#@ assembly name="$(TargetPath)" #> 
<#@ import namespace="Your.Namespace" #> 

y luego usar su clase Container.

Si tiene VS2010SP1 o superior, esto no le provocará ningún problema al bloquear ese ensamblaje en la memoria, pero si es anterior a eso, deberá reiniciar Visual Studio después de cada generación antes de poder reconstruir su proyecto.

+2

Otra opción en las plantillas T4 es para [File.ReadAllBytes()] (http://msdn.microsoft.com/en-us/library/system.io.file.readallbytes.aspx) y luego [Assembly.Load()] (http://msdn.microsoft.com/en-us/library/h538bck7.aspx) la matriz de bytes en la memoria. Esto requeriría rellenar clases calificadas 'new namespaces.class()' pero significa que no tiene que reiniciar Visual Studio cada vez. –

+0

Gracias, hombre, esto realmente funciona genial. – user1396149

Cuestiones relacionadas