c# t4

c# - Plantilla T4 que agrega ensamblaje de proyecto existente en solución



(4)

En caso de que esté usando C # use una double slash // .

Creo que sería como:

<#@ assembly name="$(SolutionDir)Project.Common.WebApi//bin//Debug//Project.Common.WebApi.dll" #>

Hola, necesito agregar el ensamblaje de un proyecto existente en mi solución en mi archivo de plantilla T4. El problema es que mi plantilla T4 está en un proyecto llamado Project.WebApi y la clase que necesito en mi plantilla T4 está dentro de un proyecto llamado Project.Common.WebApi.

He intentado importar el espacio de nombres de esta manera:

<#@ import namespace="Project.Common.WebApi.T4TemplateAttribute" #>

Pero me sale este error:

The type or namespace name ''Project'' could not be found (are you missing a using directive or an assembly reference?)

He intentado agregar el ensamblaje de esta manera:

<#@ assembly name="Project.Common.WebApi" #>

Y obtuve este error:

Compiling transformation: Metadata file ''Project.Common.WebApi'' could not be found

Mi proyecto que contiene la T4Template (Project.WebApi) tiene una referencia al Project.Common.WebApi, pero de lo que leí T4Template no usa las referencias en los proyectos.

¿Cómo puedo resolver este problema?


En caso de que su proyecto con plantilla T4 tenga referencia directa al proyecto, puede usar $ (TargetDir)

<# @ assembly name = "$ (TargetDir) Project.Common.WebApi.dll" #>


T4 funciona casi completamente independiente del resto de tu código. Sin embargo, está en el camino correcto con la directiva de assembly , pero deberá especificar una ruta completa a la DLL real del ensamblaje, a menos que el ensamblaje esté en el GAC (que probablemente no sea).

Afortunadamente, sin embargo, puede usar las macros MSBuild en las directivas T4. Entonces, probablemente obtendrás algo como

<#@ assembly name="$(SolutionDir)Project.Common.WebApi/bin/Debug/Project.Common.WebApi.dll" #>

Consulte MSDN para obtener más información acerca de esta sintaxis.

También necesita la directiva de import namespace .

Finalmente, tenga cuidado con el orden de compilación del proyecto. El proyecto que contiene su plantilla T4 ahora depende de Project.Common.WebApi, por lo que deberá asegurarse de que Project.Common.WebApi se crea primero. De lo contrario, su plantilla T4 podría vincular accidentalmente a una versión anterior del ensamblaje, haciendo que los errores sean realmente difíciles de rastrear.

Si ya tiene una referencia de proyecto, ya está todo listo, pero de lo contrario deberá configurar las dependencias correctamente. Puede hacerlo en Visual Studio a través del cuadro de diálogo "Dependencias del proyecto ...". Haga clic derecho en el proyecto para encontrarlo.


<#@ assembly name="$(TargetPath)" #>

Tan sencillo como eso.