我在写一个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