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 ответ
Это действительно возможно. Однако сначала нужно сделать пару вещей:
- Убедитесь, что ваш класс и const общедоступны (каковы они есть).
- Создайте свое решение для генерации dll (которая будет содержать статический класс и const, на который вы хотите сослаться).
- Ссылка на текущую сборку в вашем.tt с
<#@ assembly name="$(TargetPath)" #>
- Ссылка на пространство имен, в котором находится ваш статический класс
<#@ import namespace="ns" #>
- Создайте свой.tt.
- Перестройте свое решение, чтобы включить вновь сгенерированный код в сборку.
Это должно сделать это. Сложность в том, чтобы понять, что ваш.tt не работает, как любой старый файл класса в вашем проекте. Поскольку он генерируется, ему нужно что-то генерировать, что в данном случае является dll вашего проекта, который вы должны сгенерировать заранее.
И, как и обещал, вот блог, который я написал об этом вопросе:)