Сборка с шаблонами T4 для использования в других решениях?

Я только что закончил создавать шаблоны T4 для автоматического создания реализаций свойств для моих классов ViewModel (см. Здесь: Автоматическая реализация INotifyPropertyChanged посредством генерации кода T4?).

В настоящее время мне нужно иметь проект, содержащий ".tt" -файлы в решении, в котором я хочу сгенерировать реализации свойств.

Таким образом, решение, например, содержит три проекта: T4Generation, SomeProjectWithViewModels, AnotherProjectWithViewModels.

Затем при вызове T4-шаблона в T4Generation он просматривает все проекты в решении, находит все классы ViewModel и генерирует файл C #, содержащий реализации свойств для конкретной ViewModel в соответствующем проекте.

Пример:

"SomeProjectWithViewModels.SomeViewModel.cs"

public partial class SomeViewModel : BaseViewModel
{
    private string p_SomeProperty;
}

генерирует файл SomeProjectWithViewModels.SomeViewModel.Properties.cs

public partial class SomeViewModel
{
    public string SomeProperty
    {
        get { ... }
        set { ... }
    }
}

У меня возник вопрос, есть ли возможность создать сборку (например, «T4Generation.dll»), на которую можно ссылаться в любом решении, позволяющем хост-решению каким-либо образом вызывать процесс генерации кода.

Например, я бы начал новое решение SomeSolution.sln с проектами «SomeApplication.exe», «SomeClassLibrary.dll», а в SomeApplication я бы сослался на «T4Generation.dll», и в процессе сборки SomeApplication будет вызываться поколение T4. .

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


c# t4
person chrischu    schedule 04.06.2010    source источник


Ответы (1)


Вы используете Visual Studio 2010? Если это так, я бы рекомендовал использовать «Предварительно обработанные шаблоны» для того, что вы пытаетесь сделать. Предварительно обработанные шаблоны создают класс-генератор, который генерирует ваш код, вместо того, чтобы генерировать ваш код напрямую. Итак, с этими классами генератора, созданными из ваших шаблонов T4, вы можете создать консольное приложение T4Generation.EXE, которое будет вызываться из ваших проектов в качестве команды предварительной компиляции. Пройдите путь к проекту, а все остальное сделают генераторы. Затем его можно будет повторно использовать в любом проекте.

person mattmc3    schedule 12.07.2010
comment
Конечно ... к сожалению, многие люди писали об этом, когда VS2010 был в стадии бета-тестирования, и с тех пор о нем не так много прессы. Но это не так уж сложно понять, если вы сделаете это сами. Вот некоторые ссылки на del.icio.us, которые у меня были, когда я учился: msdn.microsoft.com/en-us/library/ee844259.aspx karlshifflett.wordpress.com/2009/10/30/ olegsych.com/2009/09/t4-preprocessed-text-templates - person mattmc3; 12.07.2010