перебирать класс свойств

Я пытаюсь написать шаблон T4 для перебора папки проекта (указанной) и создания js файл на основе этих свойств

Я могу вернуть свой первый файл класса как ProjectItem (возвращается как System.__ComObject)

я вижу, что имя возвращается правильно ("MyReadModel.cs")

Public Class MyReadModel{
  Public string MyName { get; set; }
  public int MyAge { get; set;}
}

теперь Я изо всех сил пытаюсь вернуть собственность из него. файл имеет FileCodeModel как System.__ComObject. я не могу найти никаких свойств.

я пытался сделать следующее:

projectItem.GetType().GetProperties()

но возвращает System.Reflection.PropertyInfo[0]

какие-нибудь подсказки, где я ошибаюсь? кажется, что его отбрасывают как объект com ... может быть, это неправильно?

РЕДАКТИРОВАТЬ:

ссылки:

http://www.olegsych.com/2008/07/t4-template-for-generating-sql-view-from-csharp-enumeration/

Как получить T4 в VS2010 для перебора свойств класса

Код:

<# Prepare(this); #>
<# foreach(ProjectItem pi in FindProjectItemsIn(CurrentProject.ProjectItems.Item("Commands"))) { #>
    <# WriteLine("found " + pi); #>
<# } #>

<#+    
static DTE Dte;
static Dictionary ResultTypes;
static TextTransformation TT;
static Microsoft.CSharp.CSharpCodeProvider codeProvider = new Microsoft.CSharp.CSharpCodeProvider();

static Project CurrentProject;

IList FindProjectItemsIn(ProjectItem start) {
var list = new List();
FindProjectItemsIn(start, list);
return list;
}

static bool IsFolder1(ProjectItem item) {
    return (item.Kind == Constants.vsProjectItemKindPhysicalFolder);
}

void FindProjectItemsIn(ProjectItem start, IList list) {
foreach(ProjectItem item in start.ProjectItems) {
if(IsFolder1(item)) {
FindProjectItemsIn(item, list);
continue;
}
list.Add(item);
}
}


void Prepare(TextTransformation tt) {
TT = tt;
    // Get the DTE service from the host
    var serviceProvider = Host as IServiceProvider;
    if (serviceProvider != null) {
        Dte = serviceProvider.GetService(typeof(SDTE)) as DTE;
    }

var projectItem = Dte.Solution.FindProjectItem(Host.TemplateFile);
CurrentProject = projectItem.ContainingProject;
}

6
задан Community 23 May 2017 в 12:25
поделиться