Сборка с шаблонами T4 для использования в других решениях? - PullRequest
1 голос
/ 04 июня 2010

Я только что закончил создавать шаблоны 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 будет вызван.

Возможно ли это?

1 Ответ

1 голос
/ 12 июля 2010

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

...