如何从嵌套模板块生成T4模板中的代码块?

时间:2012-09-13 18:20:25

标签: visual-studio-2010 dynamic code-generation t4

我在我的代码块中动态创建类和变量名称例如:

if (new<#=et.Name#> == null)

对于名为Site的实体模型,这会生成:

 if (newSite == null)

但我想要做的是评估项目的类型,然后根据该类型生成代码。出于特定目的,我想编写一个代码块,它将根据该实体的键值的数据类型动态创建新的主键。所以我想在我的模板中做这样的事情:

<#if ( new<#=et.Name#>.<#=primaryKey.Name#>.GetType() == typeof( Guid ) ) {#>
   if (new<#=et.Name#>.<#=primaryKey.Name#> == Guid.Empty )
      new<#=et.Name#>.<#=primaryKey.Name#> = Guid.NewGuid();
<#} #>

名为Site的实体模型的后续生成代码如下所示:

if ( newSite.SiteKey == Guid.Empty )
   newSite.SiteKey = Guid.NewGuid();

这在逻辑上看起来好像能够正常工作。但是,我无法找到具有嵌套模板块的正确语法,并评估这些值,然后将其放在条件中。注意表达式块嵌套在Statement Block中。所以上面的代码生成示例不起作用,因为Visual Studio抱怨语法的各种问题。

思想?

1 个答案:

答案 0 :(得分:0)

如果类型位于您正在构建的程序集中,则可以使用

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

我在View Gen T4 templates for Code First

中使用了这个技巧