国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
C#之程序集

 C#之程序集收藏

程序集的定義:
           1.程序集是一個或多個托管模塊,以及一些資源文件的邏輯組合。
           2.程序集是組件復(fù)用,以及實施安全策略和版本策略的最小單位。
           3.程序集是包含一個或者多個類型定義文件和資源文件的集合。在程序集包含的所有文件中,有一個文件用于 保存清單。(清單是元數(shù)據(jù)部分中一組數(shù)據(jù)表的集合,其中包含了程序集中一部分文件的名稱,描述了程序集的 版本,語言文化,發(fā)布者,共有導(dǎo)出類型,以及組成該程序集的所有文件)。

 程序集的物理表現(xiàn):
           1.可執(zhí)行程序集:存在一個用于表示EXE的文件,這個文件是程序集的入口點。
           2.提供功能的程序集:存在一個用于表示DLL的文件,這個文件是程序集的入口點。

程序集和托管模塊的關(guān)系:
           1.可以使用       csc   /t:module       type1.cs  
                                     csc   /t:module       type2.cs  
                                     這樣就可以生成兩個托管模塊: type1.netmodule  type2.netmodule
          2.使用命令將模塊集成到程序集中:
                                     csc  /out:xxx.dll       /t:library  /addmodule: type1.netmodule type2.netmodule xxx.cs
           這樣就有了程序集xxx.dll:    它由xxx.dll type1.netmodule type2.netmodule 組成。xxx.dll代表了這組程序集。xxx.dll也可以是xxx.exe。也可以使用al來創(chuàng)建:
          Al /out:xxx.dll /t:library type1.netmodule type2.netmodule.
         3.衛(wèi)星程序集:
                 3.1創(chuàng)建資源文件:MyResource.cn.Resx 或者MyResource.cn.txt
                 3.2使用命令resgen MyResource.cn.resx  MyResource.cn.resources 編譯資源          
                 3.3   al.exe /culture:cn /out:"cn\HelloWorld.Resources.dll" /embed:"MyResources.cn.resources" /template:"HelloWorld.exe"           
                 3.4在主程序集HelloWorld中如何訪問衛(wèi)星程序集:
                    System.Resources.ResourceManager resources =
                    new System.Resources.ResourceManager("HelloWorld.Resources.MyResources",
                    System.Reflection.Assembly.GetExecutingAssembly());

                // Print out the "HelloWorld" resource string
                Console.WriteLine(resources.GetString("HelloWorld"));
               
                // Get the new culture name
                Console.Write(resources.GetString("NextCulture"));
                3.5部署主程序集和衛(wèi)星程序集 

│  HelloWorld.exe
├─ko-kr
│      HelloWorld.resources.dll
├─it
│      HelloWorld.resources.dll
├─fr
│      HelloWorld.resources.dll
├─es
│      HelloWorld.resources.dll
├─en
│      HelloWorld.resources.dll
├─en-us
│      HelloWorld.resources.dll
└─de
       HelloWorld.resources.dll

通過AL工具來改變一個程序集的各種屬性:
        可以參見AL的幫助
通過AssemblyInfo.cs文件來改變一個程序集的屬性:
       這個文件中最重要的幾個特性是:
              1、AssemblyVersion: 格式: Major Version ---- Minor  Version ------ Build  version ------  Revision
              2、[assembly: AssemblyCulture("")]   
              3、[assembly: AssemblyDelaySign(false)]
              4、[assembly: AssemblyKeyFile("")]
              5、[assembly: AssemblyKeyName("")]
      這幾個各個程序集屬性的探討

將程序集組成各種應(yīng)用程序,進行程序集的部署:
       不考慮應(yīng)用程序的類型,可以將程序集的部署分為私有部署和全局部署。
       私有部署:
           1.本地應(yīng)用程序的部署結(jié)構(gòu)
                 AppDir
                   |---- App.exe
                   |---- App.exe.config
                   |-----AuxFilesDir
                             |------ xxx.dll
                             |------ yyy.dll
                  在App.exe.config中可以配置影響CLR尋找程序集路徑的選項。
           2.Asp.net應(yīng)用程序和XML Web服務(wù)應(yīng)用程序
                對于asp.net Web窗口和XMLWeb服務(wù)應(yīng)用程序,配置文件必須位于Web應(yīng)用程序的虛擬根目錄下,并且名稱總是Web.config 。另外子目錄也可以包含它們自己的Web.config文件,并繼承上一目錄的配置設(shè)置。
           3. 對于包含客戶方空件、以微軟的IE瀏覽器為宿主的程序集。(沒有見過)
      
         全局部署:(這里部署的都是強命名程序集)
             CLR需要支持某種機制來唯一標(biāo)識程序集。一個強命名程序集包含四個唯一標(biāo)識程序集的特性:文件名(沒有擴展名)、版本號(assemblyversion)、語言文化標(biāo)識和一個公有密鑰標(biāo)記(由公有密鑰產(chǎn)生的一個值)。
              這四個信息都存儲在AssemblyDef 中,其結(jié)構(gòu)示意如下:
               Assembly
               ------------------------
                Token: 0x200001
                Name: xxxxx
                Public Key: yyyyyyy
                HashAlgorithm: 0x00008004
                Major Version: 0x000001
                Minor Version: 0x000000
                Build  Number: 0x00000253
                Revision Number: 0x00005361
                Locale: <null>
                Flags:
          生成一個強命名程序集的步驟如下:
               1、使用SN  -k MyCompany.keys    生成名為MyCompany.keys文件,該文件包含一對以二進制存儲的共有密鑰和私有密鑰。
              2、查看共有密鑰的命令: SN -p MyCompany.keys MyCompany.PublicKey
                                                          SN -tp MyCompany.PublicKey
              3、使用特性 System.Reflection.AssemblyKeyFileAttribute將公私密鑰對程序集進行簽名。
                 [assembly:AssemblyKeyFile("MyCompany.keys")]
              4、編譯器或者AL使用公私密鑰進行簽名的過程如下:
                當(dāng)生成一個強命名程序集時,該程序集的FileDef清單元數(shù)據(jù)表將包含組成該程序集的所有文件的一個列表。當(dāng)一個文件的名稱被加入到清單中時,該文件的內(nèi)容也被轉(zhuǎn)換成一個散列值,該散列值將和文件名一起存入到FileDef表中。(這里使用的散列算法可以使用AL  /algid 命令開關(guān)來改變,或者 System.Reflection.AssebmlyAlgorithmIdAttribute定制特性來改變默認的散列算法(SHA-1)。
               在生成包含清單的PE文件之后,該PE文件的整個內(nèi)容都被轉(zhuǎn)換成一個散列值,這里使用的算法總是SHA-1,不能夠改變。該散列值經(jīng)由發(fā)布者的私有密鑰簽名,生成的RSA數(shù)字簽名被存儲在PE文件的一個保留區(qū)域中(該保留區(qū)存在于CLR表頭中)
               另外發(fā)布者的共有密鑰也被嵌入到AssebmlyDef清單元數(shù)據(jù)表中。
       (密碼學(xué)中的規(guī)則應(yīng)用:使用密鑰簽名,使用公鑰解密驗證。驗證過程:使用同樣的過程將文件進行散列,最后將包含清單的文件進行散列,得出的散列值與使用公鑰解密散列簽名得出的散列值進行比較。)
             
              共享程序集的延遲簽名:
               使用延遲簽名的理由:公司的私鑰需要安全存儲,大多數(shù)公司都不允許所有的開發(fā)人員訪問私鑰。只有幾個有安全權(quán)限的人才能訪問。
               程序集的延遲簽名需要執(zhí)行下面的步驟:
                 1.首先必須用sn 創(chuàng)建一個公共/私匙對,生成mykey.snk:
                          sn -k  mykey.snk
                 2.提取公鑰,使之可以用于開發(fā)人員:
                     sn -p mykey.snk mypublic.snk
                    在文件AssemblyInfo.cs中設(shè)置AssemblyDelaySign和AssemblyKeyFile屬性:
                    [assembly: AssemblyDelaySign(true)]
                    [assembly:AssemblyKeyFile("mypublickey.snk")]]
                    如果使用AL 工具則可以使用如下選項來實現(xiàn):
                          al /keyf  /delay
                 3.關(guān)閉簽名的驗證功能,因為程序集沒有包含簽名。
                    sn -Vr ShareDemo.dll
                 4.在發(fā)布之前,程序集可以用來實現(xiàn)重新簽名:   
                     sn -R MyAssembly.dll mykey.snk
                     sn -Vu MyAssembly.dll


                 另一中理解方法:1,2兩步相同 3.在生成程序集后,執(zhí)行下面的命令以便后面可以將該程序集安裝到GAC中,或者生成引用該程序集的其他程序集,以及測試該程序集。注意該操作只需執(zhí)行一次,沒有必要每次生成程序集時都執(zhí)行一遍該命令。

                      SN -Vr MyAssembly.dll

                4.當(dāng)準(zhǔn)備打包和部署程序集時,取得公司的私有密鑰,然后執(zhí)行下面的命令:

                       SN -R MyAssembly.dll MyCompany.keys (這個文件包含了公鑰和私鑰)

               5. 執(zhí)行下面的命令,恢復(fù)驗證過程以進行測試:

                      SN  -Vu MyAssembly.dll



        進行強命名程序集的全局部署的步驟:
        Gacutil /i  Sharedxxxx.dll

       
         強命名程序的引用
        在客戶程序集中引用程序集的格式是:
             AssemblyRef #1
     ------------------------------------
                 Token: 0x230001
                 Public key or Token: b7 7a 5c 56 19 34 e0 89
                 Name: mscorlib
                 Major Version: 0x0001
                 Minor Version: 0x0000
                 Build  Number: 0x000ce4
                 Revision Number: 0x00000
                Locale: null
                HashValue  Blob: 23 23 f3 95 e3 73 0b 33
                Flags: [none](0000)
            
           編譯時期:
             csc 將在以下目錄中查找程序集:
                 1. 當(dāng)前工作目錄
                 2. 編譯器目錄使用的CLR所在的目錄。
                 3. 任何用csc /lib命令行開關(guān)指定的目錄。
                 4. 任何LIB環(huán)境變量中指定的目錄。
            運行時期:
                 CLR如何解析類型引用:
                  1、同一個文件
                      對同一個文件中的類型的訪問在編譯時就確定了下來。CLR直接從該文件中加載被引用的類型。完成加載后,程序?qū)⒗^續(xù)執(zhí)行。
                  2、不同的文件,相同的程序集(這里說的文件應(yīng)該是模塊文件或者直接是包含清單的模塊文件,而不是源代碼文件)
                     CLR首先確保被引用的文件在當(dāng)前程序集清單中的FileDef表內(nèi)。CLR然后回在加載程序集清單文件的目錄中查找到被引用的文件。該文件被加載的同時,CLR會檢查他的散列值以確保文件的完整性。
                 3、不同的文件,不同的程序集。
                 
                 具體搜索步驟見下圖:
                


                影響程序集搜索的方法有:
                1.應(yīng)用程序的配置文件
                2.程序集的發(fā)布文件
                           AL /out: policy.1.0.xxx.dll /version:1.0.0.0  /keyfile:MyCompany.keys /linkresource:xxx.config
                           上面的命令就生成了一個包含發(fā)布者策略文件的程序集。
                            這個程序集需發(fā)布到GAC中。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Assembly學(xué)習(xí)心得
如何將程序集(dll)安裝到全局程序集緩存(GAC)中
(1)程序集基礎(chǔ)知識
ASP.NET中App_Code
不用IDE寫C#的Hello World
基于Qt 4.6的Qt Creator 1.3.0寫helloworld程序注意事項(原創(chuàng)...
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服