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

Iam*_*mIC 5 c# t4 visual-studio-2012

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

这可能吗?

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

.cs文件:

namespace me
{
  public static class Stat
  {
    public const int Const = 1;
  }
}
Run Code Online (Sandbox Code Playgroud)

.tt文件:

...
namespace me
{
  public static int Test
  {
    return <#= Stat.Const #>;
  }
}
Run Code Online (Sandbox Code Playgroud)

Lev*_*lho 4

这确实是可能的。但是,您首先需要做几件事:

  1. 确保你的类和常量都是公共的(它们确实是公共的)。
  2. 构建您的解决方案以生成 dll(它将包含您要引用的静态类和 const)。
  3. 在 .tt 中引用当前程序集<#@ assembly name="$(TargetPath)" #>
  4. 引用您的静态类所在的命名空间<#@ import namespace="ns" #>
  5. 生成您的 .tt。
  6. 重建您的解决方案以将新生成的代码包含在程序集中。

应该可以做到这一点。棘手的一点是要意识到您的 .tt 不像项目中的任何旧类文件那样工作。因为它是生成的,所以需要从中生成一些东西,在本例中是您必须预先生成的项目 dll。


正如所承诺的,这是我写的关于这个问题的博客文章:)