Я пытаюсь написать шаблон 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]
любые советы о том, где яиду не так?кажется, что он разыгрывается как ком-объект ... может быть, это неправильно?
РЕДАКТИРОВАТЬ:
ссылки:
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<string, ResultTypeInfo> ResultTypes;
static TextTransformation TT;
static Microsoft.CSharp.CSharpCodeProvider codeProvider = new Microsoft.CSharp.CSharpCodeProvider();
static Project CurrentProject;
IList<ProjectItem> FindProjectItemsIn(ProjectItem start) {
var list = new List<ProjectItem>();
FindProjectItemsIn(start, list);
return list;
}
static bool IsFolder1(ProjectItem item) {
return (item.Kind == Constants.vsProjectItemKindPhysicalFolder);
}
void FindProjectItemsIn(ProjectItem start, IList<ProjectItem> 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;
}