我在寫一個T4模板,它從程序集中加載一些類,對類進行一些分析,然後生成一些代碼。我需要做的一點分析就是確定類是否實現了一個通用列表。我可以在C#中簡單地做到這一點,例如確定類是否在T4模板中實現通用列表
public class Foo : List<string> { }
var t = typeof(Foo);
if (t.BaseType != null && t.BaseType.IsGenericType && t.BaseType.GetGenericTypeDefinition() == typeof(List<>)))
Console.WriteLine("Win");
但是T4模板使用FXCop introspection引擎,因此您無權訪問.net反射API。我已經在Reflector中度過了幾個小時,但仍然無法弄清楚。有沒有人有任何關於如何做到這一點的線索?
我認爲T4模板被編譯爲正常的.NET代碼並執行正常。你是否說過「從程序集中加載一些類」不是按照正常的方式完成的?我認爲做一個正常的.NET程序集加載會給你全面的反射支持,不是嗎? – 2010-06-09 11:49:48
你看過第一個相關問題指出的http://www.binarycoder.net/fxcop/嗎? – 2010-06-09 12:00:06
@Lasse不幸的是,t4模板無法使用Reflection API,因爲它針對代碼執行進行了優化,並導致代碼生成問題(在本博客的概述中正確解釋了http://www.olegsych.com/2007/12/how-to -use-t4-to-generate-decorator-classes /) – 2010-06-09 13:14:13