继续:怎么获取所有已加载类型
继续:如何获取所有已加载类型?
这上一个帖子中,有人提到profiler api,虽然可以找到所有类型,但是监视每一个对象代价太大,我仅仅需要找到这些类型信息,不适合我的需求。
------解决思路----------------------
前面说的dnlib查找TypeSpec表,在我的试验工程里,使用如下代码:
可以打印出来如下结果:
.net的反射无法找到TypeSpec信息,所以想找它就只好使用第三方工具解析元数据了。不过就像之前说的,动态MakeGenericType出来的type这样当然找不到。
你这个需求的动机是什么?我挺感兴趣,如果说具体点说不定能找到其它方案。
------解决思路----------------------
你可以写
------解决思路----------------------
你是要用来做什么的?
------解决思路----------------------
刚刚翻了一下,这本书的13章的确讲了如何自定义CLR中的Memory Managers和配置GC,你可以去研究下。
http://download.****.net/detail/yph123456/3092808
------解决思路----------------------
.Net好像有个GetTypes这类的函数
这上一个帖子中,有人提到profiler api,虽然可以找到所有类型,但是监视每一个对象代价太大,我仅仅需要找到这些类型信息,不适合我的需求。
------解决思路----------------------
前面说的dnlib查找TypeSpec表,在我的试验工程里,使用如下代码:
var md = dnlib.DotNet.ModuleDefMD.Load(typeof(Program).Assembly.Location);
for (uint i = 1; i <= md.MetaData.TablesStream.TypeSpecTable.Rows; i++)
{
var t = md.ResolveTypeSpec(i);
Console.WriteLine(t.FullName);
}
可以打印出来如下结果:
System.EventHandler`1<System.Net.Sockets.SocketAsyncEventArgs>
System.Func`2<System.Int32,System.Byte>
System.Nullable`1<!!0>
!!0
System.Func`2<System.Byte,System.Int32>
System.Func`2<System.Byte,System.String>
System.Func`2<System.String,System.Collections.Generic.IEnumerable`1<System.Byte>>
System.Collections.Generic.List`1<System.Int32>
.net的反射无法找到TypeSpec信息,所以想找它就只好使用第三方工具解析元数据了。不过就像之前说的,动态MakeGenericType出来的type这样当然找不到。
你这个需求的动机是什么?我挺感兴趣,如果说具体点说不定能找到其它方案。
------解决思路----------------------
你可以写
public IEnumerable<Type> GetTypes()
{
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies())
foreach (var t in GetTypes(asm))
yield return t;
}
private IEnumerable<Type> GetTypes(System.Reflection.Assembly asm)
{
Type[] ts;
try
{
ts = asm.GetTypes();
}
catch { yield break; }
foreach (var t in ts)
yield return t;
}
------解决思路----------------------
你是要用来做什么的?
------解决思路----------------------
刚刚翻了一下,这本书的13章的确讲了如何自定义CLR中的Memory Managers和配置GC,你可以去研究下。
http://download.****.net/detail/yph123456/3092808
------解决思路----------------------
.Net好像有个GetTypes这类的函数