找出Framework 4.0 新增的方法和新增的类(下)

问题描述:找出Framework 4.0 新增的方法和新增的类(上)

为什么动态加载程序集无法找出Framework 4.0 Framwork2.0 新增的方法和类?

因为控制台程序默认就添加了Framework4.0的程序集,当你使用ObjectTypestring这些类的时候就已经在使用已经加载的程序集了,clr不会重复的去加载程序集??,这点记不清了。

所以V2Assembly v4Assembly都是Framework4.0Assembly。

验证:

static void Main(string[] args) { Assembly assemblyV2 = Assembly.LoadFile( @"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll"); Assembly assemblyV4 = Assembly.LoadFile( @"C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll"); Console.WriteLine("V2的名称{0}\nV4的名称{1}", assemblyV2.FullName, assemblyV4.FullName); Console.ReadLine(); }

输出如下:

image

 

因为mscorlib.dll 是在Share Domain中的程序集,所以在同一应用程序中无法加载两个不同的mscorlib.dll.所以考虑使用两个应用程序,一个Framework 2.0,另一个Framework 4.0。

于是可以换个思路:使用2.0framework来创建的程序来调用framework4.0WCF服务。

代码结构如下:

image

V4NewLooker是基于framework 2.0Winform程序

V4WcfService是基于framework 4.0 WCF服务。

接口的定义如下:

namespace V4WcfService { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IService1”。 [ServiceContract] public interface IService1 { [OperationContract] List<TypeMembers> GetNewTypeMember(List<TypeMembers> lstOldTypes); } [DataContract] public class TypeMembers { [DataMember] public string FullName { get; set; } [DataMember] public List<string> MemberNames { get; set; } } }

服务实现代码如下:

namespace V4WcfService { // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“Service1”。 public class Service1 : IService1 { public List<TypeMembers> GetNewTypeMember(List<TypeMembers> lstOldTypes) { List<TypeMembers> result = new List<TypeMembers>(); Assembly mscorlibAssembly = typeof(object).Assembly; Type[] v4Types = mscorlibAssembly.GetTypes(); #region 所有更新的Type foreach (TypeMembers v3Type in lstOldTypes) { Type v4Type = v4Types.FirstOrDefault(t => t.FullName == v3Type.FullName); if (v4Type != null && !v4Type.IsEnum) { MemberInfo[] v4Mis = v4Type.GetMembers(); if (v4Mis.Length != v3Type.MemberNames.Count) {

MemberInfo[] v4NewMis = v4Mis.Where(mi =>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwygj.html