2016-06-07 1 views
1

comment utiliser EnvDTE se classe statiqueT4, comment utiliser EnvDTE se classe statique

<#@ template debug="false" hostspecific="true" language="C#" #> 
<#@ assembly name="System.Core" #> 
<#@ assembly name="EnvDTE" #> 

<#@ import namespace="System.Linq" #> 
<#@ import namespace="System.Text" #> 
<#@ import namespace="System.Collections.Generic" #> 
<#@ import namespace="EnvDTE" #> 
<#@ output extension=".txt" #> 


<# 
IServiceProvider hostServiceProvider = Host as IServiceProvider; 
EnvDTE.DTE dte = hostServiceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE; 
EnvDTE.ProjectItem containingProjectItem = dte.Solution.FindProjectItem(Host.TemplateFile); 
Project project = containingProjectItem.ContainingProject; 
var codes= project.CodeModel.CodeElements; 
foreach (CodeElement code in codes) { 
    if (code.Name=="MS") continue; 
    if (code.Name=="System") continue; 
    if (code.Name=="Microsoft") continue; 
    if (code.Name.StartsWith("EnvDTE")) continue; 

     try 
     {   
      foreach (CodeElement item in ((CodeNamespace)code).Members) { 
       if (item.Kind== vsCMElement.vsCMElementClass) { 
        CodeClass cc = (CodeClass)item; 
     #> 
     <#=cc.Name #> 
     <# 
       } 
      }    
     } catch {} 
} #> 

ce code est T4;

Il peut produire le nom de la classe,

Mais il ne peut pas déterminer si la classe est statique.

Je souhaite générer un nom de classe statique.

Répondre

2

Ajouter références:

<#@ assembly name="EnvDTE80" #> 
<#@ import namespace="EnvDTE80" #> 

Utiliser l'interface CodeClass2, qui a la propriété IsShared