亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

在Framework 4.0中:找出新增的方法與新增的類(二)

2020-01-24 03:21:01
字體:
來源:轉載
供稿:網友
問題描述:在Framework 4.0中:找出新增的方法與新增的類(一)

為什么動態加載程序集無法找出Framework 4.0 和Framwork2.0 新增的方法和類?
 
因為控制臺程序默認就添加了Framework4.0的程序集,當你使用Object,Type,string這些類的時候就已經在使用已經加載的程序集了,而clr不會重復的去加載程序集??,這點記不清了。
所以V2Assembly 和v4Assembly都是Framework4.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}/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 =>
    !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();
        }
    }
}

服務的實現和第一個反射的版本差不多。

Web.config文件綁定代碼如下:
復制代碼 代碼如下:

<system.serviceModel>
    <bindings>
      <wsHttpBinding>
        <binding name="NewBinding0" maxReceivedMessageSize="65536000" />
      </wsHttpBinding>
      <mexHttpBinding>
        <binding name="NewBinding1" />
      </mexHttpBinding>
    </bindings>
    <services>
      <service behaviorConfiguration="V4WcfService.Service1Behavior"
        name="V4WcfService.Service1">
        <endpoint address="" binding="wsHttpBinding" bindingConfiguration="NewBinding0"
          contract="V4WcfService.IService1">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="NewBinding1"
          contract="IMetadataExchange" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="V4WcfService.Service1Behavior">
          <!-- 為避免泄漏元數據信息,請在部署前將以下值設置為 false 并刪除上面的元數據終結點 -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障異常詳細信息以進行調試,請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

因為默認的maxReceivedMessageSize 65536,所以在后面增加了兩個0, 否則會拋出經典的超出范圍的異常。

WinForm程序界面如下:

image 

后臺代碼如下:

復制代碼 代碼如下:

namespace V4NewLooker
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private List<TypeMembers> NewTypeMembers { get; set; }
        private void btnSearch_Click(object sender, EventArgs e)
        {
            Assembly mscorlibAssembly = typeof(object).Assembly;
            List<TypeMembers> v3TypeMembers = new List<TypeMembers>();
            foreach (Type v4NewType in mscorlibAssembly.GetTypes())
            {
                List<string> memberNames = new List<string>();
                MemberInfo[] mis = v4NewType.GetMembers();
                foreach (MemberInfo mi in mis)
                {
                    memberNames.Add(mi.Name);
                }
                v3TypeMembers.Add(new TypeMembers()
                {
                    FullName = v4NewType.FullName,
                    MemberNames = memberNames
                });
            }
            using (Service1Client client = new Service1Client())
            {
                NewTypeMembers = client.GetNewTypeMember(v3TypeMembers);
            }
            List<string> typeNames=new List<string>();
            foreach (TypeMembers tm in NewTypeMembers)
            {
                typeNames.Add(tm.FullName);
            }
            lstBox_Types.DataSource = typeNames;
        }
        private void lstBox_Types_SelectedIndexChanged(object sender, EventArgs e)
        {
            string fullName = lstBox_Types.SelectedItem.ToString();
            foreach (TypeMembers tm in NewTypeMembers)
            {
                if (tm.FullName == fullName)
                {
                    lstBox_Members.DataSource = tm.MemberNames;
                    break;
                }
            }
        }
    }
}

搜索按鈕的功能就是把當前Framework 2.0的所有的Type,所有的Type中的MemberInfo封裝成請求,然后調用WCF服務。服務就會根據傳遞過來的TypeMemberInfo來輸出新增的方法和類。

運行效果如下:

image 

可以看到4.0的File類增加了ReadLines.AppendAllLines方法。上面看到兩個ReadLines是因為ReadLines方法由兩個重載。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕日韩欧美| 久久久久久尹人网香蕉| 欧美第一黄网免费网站| 欧美性猛交视频| 国产精品精品一区二区三区午夜版| 日本精品视频网站| 国产精品成人久久久久| 欧美精品免费播放| 久久97精品久久久久久久不卡| 日产精品99久久久久久| 国产精品18久久久久久首页狼| 久久久999精品免费| 国产主播喷水一区二区| 少妇久久久久久| 国产美女久久久| 精品福利在线观看| 欧美疯狂做受xxxx高潮| 国产亚洲精品激情久久| 亚洲一区二区久久久久久久| 一区二区三区精品99久久| 日韩成人av一区| 成人羞羞国产免费| 欧美精品www在线观看| 亚洲一二三在线| 欧美裸体xxxxx| 91精品国产777在线观看| 日本三级韩国三级久久| 国产精品91免费在线| 国产成人中文字幕| 在线观看国产精品日韩av| 91在线视频精品| 国产视频一区在线| 欧美激情videos| 日韩av片永久免费网站| 国产中文字幕亚洲| 欧美成人国产va精品日本一级| 久久久精品在线观看| 日韩美女视频中文字幕| 亚洲精品日韩久久久| 中文欧美日本在线资源| 欧美人成在线视频| 精品国产福利在线| 91精品国产综合久久香蕉最新版| 日韩视频免费中文字幕| 久热精品视频在线免费观看| 精品久久在线播放| 日韩精品在线观看一区| 久久久久久国产精品三级玉女聊斋| www.日本久久久久com.| 国产精品女人网站| 国产精品欧美激情在线播放| 久久久国产精品视频| 亚洲成人久久网| 国产福利精品视频| 黑人狂躁日本妞一区二区三区| 亚洲女人天堂视频| 538国产精品一区二区免费视频| 国产婷婷色综合av蜜臀av| 国产精品第二页| 精品福利一区二区| 中文字幕国产精品久久| 亚洲影院污污.| 亚洲精品视频在线播放| 伊人精品在线观看| 国产91精品久久久久| 亚洲视频电影图片偷拍一区| 91免费看片网站| 久久在线视频在线| 亚洲社区在线观看| 国产精品网红直播| 欧美另类极品videosbest最新版本| 97久久精品在线| 欧美猛交ⅹxxx乱大交视频| 91精品视频在线播放| 亚洲综合av影视| 555www成人网| 97av在线视频免费播放| 欧美日韩电影在线观看| 久久躁日日躁aaaaxxxx| 中文字幕亚洲情99在线| 亚洲精品欧美日韩专区| 国产一区二区三区在线看| 91免费版网站入口| 久久久久久久久久久免费精品| 欧美孕妇孕交黑巨大网站| 久久综合久中文字幕青草| 中文字幕亚洲色图| 久久电影一区二区| 亚洲jizzjizz日本少妇| 一区二区成人精品| 欧美成人性生活| 欧美亚洲免费电影| 久久久久亚洲精品成人网小说| 国产精自产拍久久久久久| 成人福利在线观看| 日本免费在线精品| 成人激情综合网| 午夜精品福利视频| 久久久人成影片一区二区三区| 久久精品99无色码中文字幕| 欧美乱大交xxxxx另类电影| 欧美性在线观看| 亚洲国产欧美一区二区丝袜黑人| 亚洲免费视频网站| 日韩精品免费一线在线观看| 精品视频在线播放| 992tv成人免费影院| 日韩av免费在线播放| 精品久久久久久| 国产91精品久久久久久| 麻豆乱码国产一区二区三区| 亚洲色无码播放| 久久久久女教师免费一区| 久久久www成人免费精品张筱雨| 综合久久五月天| 国产成人精品日本亚洲专区61| 欧美成人午夜激情视频| 欧美一级高清免费播放| 日韩精品999| 欧美精品福利在线| 91在线|亚洲| 黄色一区二区在线观看| 1769国产精品| 欧美在线欧美在线| 中文字幕久久久| 91啪国产在线| 欧美亚洲在线视频| 欧洲永久精品大片ww免费漫画| 国产精品日韩在线观看| 国产精品一区二区三区久久| 91久久久久久久一区二区| 亚洲精品一区二区网址| 91香蕉亚洲精品| 国产啪精品视频网站| 97精品国产aⅴ7777| 欧美精品在线看| 亚洲黄页网在线观看| 国产精品久久久久久久久借妻| 亚洲精品www久久久久久广东| 国产一区二区三区视频| 日韩久久精品电影| 国产精品久久精品| 久热99视频在线观看| 人人澡人人澡人人看欧美| 亚洲天堂男人的天堂| 日韩高清有码在线| 国产一区私人高清影院| 亚洲片国产一区一级在线观看| 成人免费看片视频| 国产精品美女免费视频| 欧美插天视频在线播放| 黄色一区二区在线| 51精品国产黑色丝袜高跟鞋| 一区二区三区回区在观看免费视频| xxx一区二区| 青青久久aⅴ北条麻妃| 久久久久久久久久久网站| 这里只有精品在线观看| 亚洲乱码一区二区| 亚洲自拍偷拍福利| 色先锋资源久久综合5566| 成人免费在线视频网址| 91久久久久久久久久久久久| 亚洲国产成人精品久久久国产成人一区|