Framework 4.0 에서:새로 추 가 된 방법 과 새로 추 가 된 클래스 찾기(2)

문제 설명:Framework 4.0 에서:새로 추 가 된 방법 과 새로 추 가 된 클래스 를 찾 습 니 다(1)왜 동적 로드 프로그램 집합 은 Framework 4.0 과 Framwork 2.0 에 추 가 된 방법 과 종 류 를 찾 을 수 없 습 니까? 콘 솔 프로그램 이 기본적으로 Framework 4.0 프로그램 집합 을 추 가 했 기 때문에 Object,Type,string 등 을 사용 할 때 이미 불 러 온 프로그램 집합 을 사용 하고 있 습 니 다.clr 는 프로그램 집합 을 반복 적 으로 불 러 오지 않 습 니까?그 건 기억 이 안 나.그래서 V2assembly 와 v4Assembly 는 모두 Framework 4.0 의 Assembly 입 니 다.인증:

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}
V4 {1}", assemblyV2.FullName, assemblyV4.FullName);
    Console.ReadLine();
}
출력 은 다음 과 같 습 니 다.
image  
mscorlib.dll 은 Share Domain 의 프로그램 집합 이기 때문에 같은 프로그램 에서 두 개의 다른 mscorlib.dll 을 불 러 올 수 없습니다.따라서 두 개의 프로그램,하나의 Framework 2.0,다른 Framework 4.0 을 사용 하 는 것 을 고려 합 니 다.
따라서 생각 을 바 꿀 수 있 습 니 다.2.0 의 framework 로 만 든 프로그램 으로 framework 4.0 의 WCF 서 비 스 를 호출 할 수 있 습 니 다.
코드 구 조 는 다음 과 같다.
image
V4 NewLooker 는 framework 2.0 기반 Winform 프로그램 입 니 다.
V4WcfService 는 프레임 워 크 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 =>
    !v3Type.MemberNames.Contains(mi.Name)).ToArray();
                        result.Add(new TypeMembers()
                        {
                            FullName = v4Type.FullName,
                            MemberNames = v4NewMis.Select(mi => mi.Name).ToList()
                        });
                    }
                }
            }
            #endregion
            #region Type
            List<string> v3TypeFullName = lstOldTypes.Select(tm => tm.FullName).ToList();
Type[] v4NewTypes = v4Types.Where(t => !v3TypeFullName.Contains(t.FullName) &&
!t.IsEnum).ToArray();
            foreach (Type v4NewType in v4NewTypes)
            {
                result.Add(new TypeMembers()
                {
                    FullName = v4NewType.FullName,
                    MemberNames = v4NewType.GetMembers().Select(mi => mi.Name).ToList()
                });
            }
            #endregion
            return result.OrderBy(tm=>tm.FullName).ToList();
        }
    }
}
서비스의 실현 과 첫 번 째 반 사 된 버 전의 차이 가 많 지 않다.웹.config 파일 바 인 딩 코드 는 다음 과 같 습 니 다.
WinForm 프로그램 인터페이스 는 다음 과 같 습 니 다.
image  
배경 코드 는 다음 과 같 습 니 다.서 비 스 는 전 달 된 Type 과 MemberInfo 에 따라 새로 추 가 된 방법 과 클래스 를 출력 합 니 다.
실행 효 과 는 다음 과 같 습 니 다:
image  
4.0 의 File 류 가 ReadLines.AppendAllLines 방법 을 추가 한 것 을 볼 수 있다.위 에서 두 개의 ReadLines 를 본 것 은 ReadLines 방법 이 두 개의 무 거 운 짐 으로 되 어 있 기 때문이다.

좋은 웹페이지 즐겨찾기