T4 ссылается на const в статическом классе во время компиляции

У меня есть файл T4 C#, в котором мне нужно ссылаться на константу в статическом классе. Статический класс находится в том же пространстве имен.

Это возможно?

Ниже приведена лишь иллюстрация. Мне нужно вычислить фактическую константу на основе существующих констант, но есть также вызов метода расширения. Чтобы было проще, я просто иллюстрирую концепцию.

Файл.cs:

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

, ТТ файл:

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

1 ответ

Решение

Это действительно возможно. Однако сначала нужно сделать пару вещей:

  1. Убедитесь, что ваш класс и const общедоступны (каковы они есть).
  2. Создайте свое решение для генерации dll (которая будет содержать статический класс и const, на который вы хотите сослаться).
  3. Ссылка на текущую сборку в вашем.tt с <#@ assembly name="$(TargetPath)" #>
  4. Ссылка на пространство имен, в котором находится ваш статический класс <#@ import namespace="ns" #>
  5. Создайте свой.tt.
  6. Перестройте свое решение, чтобы включить вновь сгенерированный код в сборку.

Это должно сделать это. Сложность в том, чтобы понять, что ваш.tt не работает, как любой старый файл класса в вашем проекте. Поскольку он генерируется, ему нужно что-то генерировать, что в данном случае является dll вашего проекта, который вы должны сгенерировать заранее.


И, как и обещал, вот блог, который я написал об этом вопросе:)

Другие вопросы по тегам