T4 перебирает проекты в папках решений - PullRequest
0 голосов
/ 18 мая 2018

У меня есть шаблон T4, который генерирует мои классы свободного строителя для моих api-контрактов.Поэтому, когда у меня есть контракт CreatePersonRequest, который имеет имя и имя, я генерирую CreatePersonRequestBuilder, который создает CreatePersonRequest.

Таким образом, мои сборщики всегда в курсе, и, унаследовав одно из них, я легко могу сделать различныепредварительно заполненные объекты с хорошим синтаксисом.

Это прекрасно работает, когда все мои проекты находятся в корне моего решения.Как только я начал добавлять папки с решениями, это больше не работало.

public EnvDTE.Project GetProjectByName(string projectName) {

    var serviceProvider = (IServiceProvider)this.Host;

    var dte = (EnvDTE.DTE)serviceProvider.GetService(typeof(EnvDTE.DTE));



    var solution = dte.Solution;

    foreach (Project p in solution.Projects)

    {

        if (p != null) {

            if (p.Name == projectName){

                return p;

            }

        }

    }



    return null;

}

Вначале я извлекаю все свои проекты из своих решений, а затем перебираю их и проверяю имя.Очевидно, слово «проект» здесь также может означать папку решения.

Довольно легко исправить, подумал я.Проверьте тип проекта (это может быть проект / папка / ....) и, если папка, перейдите глубже в иерархию ProjectItems.

Проблема, с которой я столкнулся, состоит в том, что у меня есть ProjectItem, которыйинтерфейс (и не реализованный в Project).Поэтому у меня нет возможности преобразовать этот ProjectItem в проект (хотя свойство ProjectItem.Kind говорит мне, что это проект).

Как можно глубже извлечь проекты в иерархию решений?

...