T4在编译时引用静态类中的const

时间:2013-06-15 13:08:12

标签: c# visual-studio-2012 t4

我有一个T4 C#文件,我需要在静态类中引用一个常量。静态类位于同一名称空间中。

这可能吗?

下面仅仅是一个例子。我需要根据现有常量计算实际常量,但也需要调用扩展方法。为了简单起见,我只是在说明这个概念。

.cs文件:

namespace me
{
  public static class Stat
  {
    public const int Const = 1;
  }
}

。 tt文件:

...
namespace me
{
  public static int Test
  {
    return <#= Stat.Const #>;
  }
}

1 个答案:

答案 0 :(得分:4)

确实有可能。但是你需要先做几件事:

  1. 确保您的类和const都是公共的(它们是)。
  2. 构建解决方案以生成一个dll(它将包含您要引用的静态类和const)。
  3. 使用<#@ assembly name="$(TargetPath)" #>
  4. 引用.tt中的当前程序集
  5. 使用<#@ import namespace="ns" #>
  6. 引用找到静态类的命名空间
  7. 生成.tt。
  8. 重建您的解决方案,以在程序集中包含新生成的代码。
  9. 应该这样做。棘手的一点是意识到你的.tt不像你项目中的任何旧类文件那样工作。因为它是生成的,所以需要生成一些东西,在这种情况下,你必须预先生成你的项目dll。


    正如所承诺的那样,here is the blog post I wrote about this question:)