Using types in a T4 template that exist in the same project as the template

I'm working on my first T4 code generation tool to add some Stored Procedure helper code to my project. I've created custom types (e.g. StoredProcedure and StoredProcedureParameter to help with my code generation and have included the assembly and namespace references in my code:

<#@ template debug="false" hostspecific="false" language="VB" #>
<#@ output extension=".generated.vb" #>
<#@ assembly name="$(TargetPath)" #>
<#@ import namespace="StoredProcCodeGenerator" #>

This allows me to use my custom types in my T4 template code. However, because my custom types exist in the same project as the T4 template code, I can't recompile my project once I run the template code without restarting Visual Studio. This isn't very much fun.

I read a great article that addresses this exact issue by using the T4 Toolbox, but it's not working. Either I'm implementing the VolatileAssembly directive wrong or the T4 toolbox simply didn't get installed. I'm not sure that the toolbox got installed correctly (I'm using VS 2010 on Win XP).

What are some ways that I might be able to fix this problem?

21
задан Ben McCormack 10 November 2010 в 17:55
поделиться

1 ответ

Вам необходимо удалить предыдущую ссылку сборки и , затем добавить ссылку VolatileAssembly . Если сначала не удалить ссылку на обычную сборку , при добавлении ссылки VolatileAssembly вы получите сообщение об ошибке, которое уже было добавлено.

<#@ template debug="false" hostspecific="false" language="VB" #>
<#@ output extension=".generated.vb" #>

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

<#@ VolatileAssembly processor="T4Toolbox.VolatileAssemblyProcessor" 
    name="$(TargetPath)" #>
<#@ import namespace="StoredProcCodeGenerator" #>  

Теперь вы можете продолжить сборку своего проекта и использовать типы, определенные в этом проекте, в ваших шаблонах T4.

10
ответ дан 29 November 2019 в 22:08
поделиться