2013-02-16 30 views
16

我想要得到的所有類中的特定組件,這是我的代碼反思與T4 GET組件

var assembly=Assembly.GetExecutingAssembly(); 

var assemblies = assembly.GetTypes().Where(t => String.Equals(t.Namespace, "RepoLib.Rts.Web.Plugins.Profiler.Models", StringComparison.Ordinal)).ToArray(); 

在C#代碼中的所有事情是確定的,並讓我的組件,但是當在t4文件寫入我不有任何錯誤,但我的程序集計數是。

回答

33

在T4模板中執行的程序集不是你的,而是來自T4引擎的。

要從組件的訪問類型,你必須執行以下步驟:

  1. 您組裝添加一個參考模板。把它放在最上面:

    <#@ assembly name="$(SolutionDir)<Project>\bin\Debug\<Project>.dll" #> 
    
  2. 導入組件的命名空間。把以前的線下某處:

    <#@ import namespace="<Project>.<Namespace>" #> 
    
  3. 要訪問的類型在這個大會,選擇其中之一,並獲得裝配從中:

    var assembly = typeof(<Type in assembly>).Assembly; 
    var types = assembly.GetTypes() 
            .Where(t => String.Equals(
             t.Namespace, 
             "RepoLib.Rts.Web.Plugins.Profiler.Models", 
             StringComparison.Ordinal)) 
            .ToArray(); 
    
+1

什麼是<類型組裝>? – 2013-02-16 12:06:38

+0

@ShahroozJefri:你想從任何類型的裝配中獲得所有類型。例如,它可能是'RepoLib.Rts.Web.Plugins.Profiler.Models'命名空間中的一種類型 – 2013-02-16 12:12:34

+7

如果您不使用預處理模板,並且想要獲取有關同一項目內部類型和類的信息當你的T4模板駐留時,我會建議不要使用反射。 T4模板在設計時進行了轉換,因此由$(SoutionDir) \ bin \ Debug \ .dll引用的程序集可能來自您的上一次構建並且過時! 您可能想要使用Visual Studio代碼模型(請參閱:http://stackoverflow.com/questions/14134016/design-time-reflection/14402269#14402269) – Nico 2013-02-16 14:26:54