最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2013年05月13日 17:17:27   作者:  
為什么動(dòng)態(tài)加載程序集無(wú)法找出Framework 4.0 和Framwork2.0 新增的方法和類(lèi)
問(wèn)題描述:在Framework 4.0中:找出新增的方法與新增的類(lèi)(一)

為什么動(dòng)態(tài)加載程序集無(wú)法找出Framework 4.0 和Framwork2.0 新增的方法和類(lèi)?
 
因?yàn)榭刂婆_(tái)程序默認(rèn)就添加了Framework4.0的程序集,當(dāng)你使用Object,Type,string這些類(lèi)的時(shí)候就已經(jīng)在使用已經(jīng)加載的程序集了,而clr不會(huì)重復(fù)的去加載程序集??,這點(diǎn)記不清了。
所以V2Assembly 和v4Assembly都是Framework4.0的Assembly。

驗(yàn)證:
復(fù)制代碼 代碼如下:

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的名稱(chēng){0}\nV4的名稱(chēng){1}", assemblyV2.FullName, assemblyV4.FullName);
    Console.ReadLine();
}

輸出如下:

image 

因?yàn)閙scorlib.dll 是在Share Domain中的程序集,所以在同一應(yīng)用程序中無(wú)法加載兩個(gè)不同的mscorlib.dll.所以考慮使用兩個(gè)應(yīng)用程序,一個(gè)Framework 2.0,另一個(gè)Framework 4.0。

于是可以換個(gè)思路:使用2.0framework來(lái)創(chuàng)建的程序來(lái)調(diào)用framework4.0WCF服務(wù)。

代碼結(jié)構(gòu)如下:

image

V4NewLooker是基于framework 2.0Winform程序

V4WcfService是基于framework 4.0 WCF服務(wù)。

接口的定義如下:

復(fù)制代碼 代碼如下:

namespace V4WcfService
{
    // 注意: 使用“重構(gòu)”菜單上的“重命名”命令,可以同時(shí)更改代碼和配置文件中的接口名“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; }
    }
}

服務(wù)實(shí)現(xiàn)代碼如下:
復(fù)制代碼 代碼如下:

namespace V4WcfService
{
    // 注意: 使用“重構(gòu)”菜單上的“重命名”命令,可以同時(shí)更改代碼、svc 和配置文件中的類(lèi)名“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();
        }
    }
}

服務(wù)的實(shí)現(xiàn)和第一個(gè)反射的版本差不多。

Web.config文件綁定代碼如下:
復(fù)制代碼 代碼如下:

<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">
          <!-- 為避免泄漏元數(shù)據(jù)信息,請(qǐng)?jiān)诓渴鹎皩⒁韵轮翟O(shè)置為 false 并刪除上面的元數(shù)據(jù)終結(jié)點(diǎn) -->
          <serviceMetadata httpGetEnabled="true"/>
          <!-- 要接收故障異常詳細(xì)信息以進(jìn)行調(diào)試,請(qǐng)將以下值設(shè)置為 true。在部署前設(shè)置為 false 以避免泄漏異常信息 -->
          <serviceDebug includeExceptionDetailInFaults="false"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
  </system.serviceModel>

因?yàn)槟J(rèn)的maxReceivedMessageSize 65536,所以在后面增加了兩個(gè)0, 否則會(huì)拋出經(jīng)典的超出范圍的異常。

WinForm程序界面如下:

image 

后臺(tái)代碼如下:

復(fù)制代碼 代碼如下:

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;
                }
            }
        }
    }
}

搜索按鈕的功能就是把當(dāng)前Framework 2.0的所有的Type,所有的Type中的MemberInfo封裝成請(qǐng)求,然后調(diào)用WCF服務(wù)。服務(wù)就會(huì)根據(jù)傳遞過(guò)來(lái)的TypeMemberInfo來(lái)輸出新增的方法和類(lèi)。

運(yùn)行效果如下:

image 

可以看到4.0的File類(lèi)增加了ReadLines.AppendAllLines方法。上面看到兩個(gè)ReadLines是因?yàn)镽eadLines方法由兩個(gè)重載。

相關(guān)文章

  • C#使用Lazy<T>實(shí)現(xiàn)對(duì)客戶(hù)訂單的延遲加載

    C#使用Lazy<T>實(shí)現(xiàn)對(duì)客戶(hù)訂單的延遲加載

    這篇文章介紹了C#使用Lazy<T>實(shí)現(xiàn)對(duì)客戶(hù)訂單延遲加載的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • C# WinForm制作一個(gè)批量轉(zhuǎn)化文件格式的小工具

    C# WinForm制作一個(gè)批量轉(zhuǎn)化文件格式的小工具

    在生活中有時(shí)候會(huì)遇到批量轉(zhuǎn)換格式的需求,一個(gè)個(gè)點(diǎn)太麻煩了,一個(gè)能夠?qū)崿F(xiàn)批量文件格式轉(zhuǎn)換的工具非常有用,所以本文小編使用C# WinForm制作一個(gè)批量轉(zhuǎn)化文件格式的小工具,文中有具體實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-11-11
  • C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(三)

    C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(三)

    這篇文章主要介紹了C#語(yǔ)法相比其它語(yǔ)言比較獨(dú)特的地方(三),本文講解了在C++中允許從一個(gè)case貫穿到另一個(gè)case標(biāo)簽、as和is只會(huì)檢測(cè)待轉(zhuǎn)化類(lèi)型的類(lèi)型,而不會(huì)進(jìn)行其它操作等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#/VB.NET實(shí)現(xiàn)將XML轉(zhuǎn)為PDF

    C#/VB.NET實(shí)現(xiàn)將XML轉(zhuǎn)為PDF

    可擴(kuò)展標(biāo)記語(yǔ)言(XML)文件是一種標(biāo)準(zhǔn)的文本文件,它使用特定的標(biāo)記來(lái)描述文檔的結(jié)構(gòu)以及其他特性。本文將利用C#實(shí)現(xiàn)XML文件轉(zhuǎn)PDF?,需要的可以參考一下
    2022-03-03
  • java和c#使用hessian通信的方法

    java和c#使用hessian通信的方法

    這篇文章主要介紹了java和c#使用hessian通信的方法,服務(wù)器端為Java,客戶(hù)端為C#實(shí)現(xiàn)。是一個(gè)非常實(shí)用的技巧,需要的朋友可以參考下
    2014-09-09
  • C#實(shí)現(xiàn)塊狀鏈表的項(xiàng)目實(shí)踐

    C#實(shí)現(xiàn)塊狀鏈表的項(xiàng)目實(shí)踐

    這篇文章主要介紹了C#實(shí)現(xiàn)塊狀鏈表的項(xiàng)目實(shí)踐,通過(guò)定義塊和鏈表類(lèi),利用塊內(nèi)元素引用實(shí)現(xiàn)塊與塊之間的鏈接關(guān)系,從而實(shí)現(xiàn)對(duì)塊狀鏈表的遍歷、插入和刪除等操作,感興趣的可以了解一下
    2023-11-11
  • 解析OpenXml?Pptx的邊框虛線轉(zhuǎn)為WPF的邊框虛線問(wèn)題

    解析OpenXml?Pptx的邊框虛線轉(zhuǎn)為WPF的邊框虛線問(wèn)題

    這篇文章主要介紹了OpenXml?Pptx的邊框虛線轉(zhuǎn)為WPF的邊框虛線,在文中用PPTX的7種直線,分別設(shè)置7種能夠設(shè)置的虛線類(lèi)型,具體實(shí)例代碼跟隨小編一起看看吧
    2021-12-12
  • C#代碼延時(shí)的幾種實(shí)現(xiàn)

    C#代碼延時(shí)的幾種實(shí)現(xiàn)

    本文主要介紹了C#代碼延時(shí)的幾種實(shí)現(xiàn),主要介紹了三種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • C#中winform控制textbox輸入只能為數(shù)字的方法

    C#中winform控制textbox輸入只能為數(shù)字的方法

    這篇文章主要介紹了C#中winform控制textbox輸入只能為數(shù)字的方法,包括使用keyPress事件限制鍵盤(pán)輸入以及TextChanged事件限制粘貼等情況,來(lái)實(shí)現(xiàn)控制輸入為數(shù)字的功能,需要的朋友可以參考下
    2015-01-01
  • C#實(shí)現(xiàn)Nginx平滑加權(quán)輪詢(xún)算法

    C#實(shí)現(xiàn)Nginx平滑加權(quán)輪詢(xún)算法

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)Nginx平滑加權(quán)輪詢(xún)算法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評(píng)論

灵石县| 浠水县| 东城区| 勃利县| 壶关县| 温泉县| 德化县| 宜君县| 亳州市| 工布江达县| 肃南| 社会| 连城县| 锦屏县| 古交市| 通海县| 射洪县| 大名县| 黄大仙区| 景德镇市| 延川县| 大方县| 修文县| 武宣县| 新巴尔虎右旗| 崇仁县| 曲周县| 沽源县| 连城县| 乌苏市| 英德市| 淄博市| 罗田县| 扎鲁特旗| 阜宁县| 色达县| 铁岭县| 济阳县| 海宁市| 农安县| 类乌齐县|