I am trying to write a T4 template to iterate over a project folder (specified) and create a js file based on these properties.
I can return my first class file as ProjectItem (returned as System .__ ComObject)
I see that the name is being returned correctly ("MyReadModel.cs")
Public Class MyReadModel{ Public string MyName { get; set; } public int MyAge { get; set;} }
Now I am trying to return properties from it. The file has a FileCodeModel as a System .__ ComObject. I can not find any properties.
I tried to do the following:
projectItem.GetType().GetProperties()
but returns System.Reflection.PropertyInfo [0]
any tips on where i'm wrong? it seems to be cast as a com object ... maybe this is wrong?
EDIT:
links:
http://www.olegsych.com/2008/07/t4-template-for-generating-sql-view-from-csharp-enumeration/
How to get T4 in VS2010 to iterate over class properties
the code:
<# 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; }
source share