在Framework 4.0中:找出新增的方法与新增的类(一)
程序员文章站
2023-12-19 20:47:28
程序思路:动态加载v4和v2的mscorlib.dll程序集,通过反射进行比较。之所以加载mscorlib.dll 是因为framework中的大部分类都在这里,而发生变更...
程序思路:动态加载v4和v2的mscorlib.dll程序集,通过反射进行比较。
之所以加载mscorlib.dll 是因为framework中的大部分类都在这里,而发生变更的也就是这里最多。
第一步:新建控制台程序:
加载程序集:
static void main(string[] args)
{
string v4assemblypath = @"c:\windows\microsoft.net\framework\v4.0.30319\mscorlib.dll";
string v2assemblypath = @"c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll";
//assembly v4assembly = typeof(object).assembly;
assembly v4assembly = assembly.loadfile(v4assemblypath);
assembly v2assembly = assembly.loadfile(v2assemblypath);
type[] v4types = v4assembly.gettypes();
type[] v2types = v2assembly.gettypes();
foreach (type v2type in v2types)
{
type v4type = v4types.first(t => t.fullname == v2type.fullname);
memberinfo[] v2mis = v2type.getmethods();
memberinfo[] v4mis = v4type.getmethods();
if (v2mis.length != v4mis.length)
{
foreach (memberinfo v2mi in v2mis)
{
bool isexist = false;
foreach (memberinfo v4mi in v4mis)
{
if (v2mi.name == v4mi.name)
{
isexist = true;
break;
}
}
if (!isexist)
{
console.writeline("{0}:{1}", v2type.fullname, v2mi.name);
}
}
}
}
console.writeline("程序执行完毕!");
console.readline();
}
之所以加载mscorlib.dll 是因为framework中的大部分类都在这里,而发生变更的也就是这里最多。
第一步:新建控制台程序:
加载程序集:
加载程序集完成后,自然要获取程序集中的所有type,这里直接使用默认的gettypes方法。
获取了v4types 和v2types之后,就要对v2types里面的所有type于v4types里面的所有type进行比较,
而比较的内容就是getmembers返回的所有memberinfo.
完整代码如下:
复制代码 代码如下:
static void main(string[] args)
{
string v4assemblypath = @"c:\windows\microsoft.net\framework\v4.0.30319\mscorlib.dll";
string v2assemblypath = @"c:\windows\microsoft.net\framework\v2.0.50727\mscorlib.dll";
//assembly v4assembly = typeof(object).assembly;
assembly v4assembly = assembly.loadfile(v4assemblypath);
assembly v2assembly = assembly.loadfile(v2assemblypath);
type[] v4types = v4assembly.gettypes();
type[] v2types = v2assembly.gettypes();
foreach (type v2type in v2types)
{
type v4type = v4types.first(t => t.fullname == v2type.fullname);
memberinfo[] v2mis = v2type.getmethods();
memberinfo[] v4mis = v4type.getmethods();
if (v2mis.length != v4mis.length)
{
foreach (memberinfo v2mi in v2mis)
{
bool isexist = false;
foreach (memberinfo v4mi in v4mis)
{
if (v2mi.name == v4mi.name)
{
isexist = true;
break;
}
}
if (!isexist)
{
console.writeline("{0}:{1}", v2type.fullname, v2mi.name);
}
}
}
}
console.writeline("程序执行完毕!");
console.readline();
}
程序运行结果如下: