日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#-VS程序集

發布時間:2025/7/25 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#-VS程序集 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序集即代碼組,可以是單個文件或多個文件,按一個整體部署,但可指定自身調用其他程序集的版本。
  • 推出原因
為解決dll地獄而推出,也可解決其他問題。dll地獄,a應用使用dll版本1,b應用使用dll版本2,傳統的com(一般用dll執行)模式,會自動調用最新版本的dll,如果這個dll不向后兼容(大多dll都不向后兼容),導致裝了b應用后,a應用不能使用。 .net模式,在程序集中,指定使用哪個版本,在調用時,默認使用指定的版本,解決了dll地獄問題。
  • 程序集信息
主版本,次版本、修訂號、內部版本號 公司公鑰 程序集人類友好名稱 程序清單。包含在一個可執行文件中,或表示為一個獨立的文件。 提供的自定義類型 引用其他程序集的信息。名稱、版本、區域性和公鑰。
  • 類型元數據。程序集提供給外部使用的自定義類型
  • msil代碼。各種語言最終被編譯成的代碼,這代碼能被clr執行
  • 資源。通常指圖片、本地化翻譯文本等被塞入程序集的所有其他文件。
  • 構建程序集
寫入上述程序集信息,還可以自定義特性,設置一般特性是[assembly:AttributeName("AttibuteValue")]注意不是語言的一部分,但在程序文件中,不用分號。要引用system.Reflection空間。程序集信息也可以在VS的解決方案管理器,項目文件,右鍵屬性設置。
  • 創建單文件程序集
用csc 程序集文件名 或VS的生成,可生成可執行程序集。在VS,程序集信息保存在AssemblyInfo.cs的單獨文件里,特別說明的是公鑰,用微軟網站上的sn.exe生成,在這個文件里指明路徑和文件名mykey.snk,這個公鑰文件名需要唯一,不與已有的其他公司或本公司其他公鑰相同。 程序集可沒有main方法,此時是作為庫程序集使用,可用命令行編譯為dll,csc \out: 期望文件名 ?\t:library?源代碼文件名
  • 創建多文件程序集
必須用命令行工具創建多文件程序集,使用csc和程序集鏈接器al。不能為VS內的C#應用程序創建多文件程序集。 C#文件A包含方法,沒入口,定義了命名空間namespaceA;文件B包含main,引用了namespaceA;文件C包含程序集清單信息;單獨的位圖文件D.bmp。 編譯文件A成模塊文件A.netmodule,沒編譯成庫文件 csc /t:module A.cs;編譯文件B,告訴編譯器找A文件中的命名空間 csc /addmodule:A.netmodule /t:module B.cs;編譯C成單獨的模塊 csc /t:module C.cs;最后用程序集鏈接器al將這4個文件一起并入可執行文件 al A.netmodule b.netmodule c.netmodule /embed:D.bmp /main:B.Main /out:A.exe
  • 查看程序集內容
用反匯編命令ildasm outABCD.exe,ILDasm只能反匯編.net文件,也可通過啟動微軟SDK里的ILDasm查看。
  • 強名稱和簽名
運行時,用來防止惡意代碼代替可信任代碼,強名稱可保證特定程序集自編譯以來,內容是否沒有被更改;代碼簽名,為程序集提供一個信任級。 給程序集指定強名稱,就是將公鑰加密應用到程序集。公鑰加密包括公鑰和私鑰各一個,公鑰全世界公用,私鑰是嚴格保守的秘密。一種加密方法是程序集由公鑰加密,再由匹配的私鑰解密,這種使用人都有秘密了;另一種方法是程序集由私鑰簽名,用公鑰驗證,這種使用人不必有秘密,.net采用這種。 使用強名稱中密鑰的過程。開發庫時,確定程序集的密鑰;創建程序集時,把私鑰給程序集的哈希;使用程序集的程序,包括這個私鑰對應的公鑰;運行時,clr用第2個文件的公鑰,檢驗第1個文件中的哈希,是否是預期的私鑰簽名;隨后,哈希可檢驗第1個文件的內容是否被篡改過(沒改過的,能與程序集的文件匹配)。 指定強名稱的方法。可以使用sn.exe創建密鑰對,-K開關 sn -k A.snk;在程序集的源代碼中使用AssenmblyKeyFileAttribute特性;使用al把密鑰和程序集鏈接起來,al A.netmodule b.netmodule c.netmodule /embed:D.bmp /main:B.Main /out:A.exe /t:exe /keyfile:A.snk;另一個程序集使用此程序集,可以在編譯那個程序集時,使用/reference開關來檢索公鑰。
  • 代碼簽名
強名稱判斷程序集是否被篡改,保證不了篡改前的最初文件沒有惡意代碼。這里是第二種安全機制,給程序集添加Authenticode數字簽名。使用Authenticode簽名的程序集,證明其發行者已經過公認授權機構的證書授權。取得證書授權,需要提供省份證明和一定費用。 準備過程是。.net框架有證書創建工具makecert -n "公司名" -sv 包含證書私鑰的文件.pvk 證書名.cer,運行時,會需要指定私鑰文件的密碼;轉換證書cert2spc X_509證書名.cer 軟件發行者證書名.spc;文件簽名工具signcode給程序集簽名,啟動向導,選程序集文件,自定義,從文件選擇剛才的軟件發行者證書.spc文件,指定A.snk私鑰文件,私鑰密碼,散列算法,完成; 證書驗證工具chktrust A.exe 運行后,如果不是公認的證書授權機構簽發的,會有警告信息,是公認的,會顯示是哪個機構授權的。
  • 程序集版本控制
版本號。主版本號1,次版本號0,內部版本號7,修訂號(專用號)18914,即1.0.7.18914。 檢索版本號。使用system.Reflection空間的AssenblyName類的Version屬性,這屬性返回一個實例,實例使用4個屬性,返回版本號的4個部分。Version v =?system.Reflection.Assembly.GetExecutingassembly().getName().version; 用重載的V.Tostring()得到版本號;也可指定磁盤文件名獲取版本號。
  • 版本兼容性與策略文件
版本號命名通用標準。新的主版本號和次版本號表示,這個新版本與老版本不兼容,例如3.0.0.0與版本2.4.8.1932不兼容,只要在代碼中引入了不相容版本,就應該更改主版本號;新的內部版本號表示可能兼容,在引入服務包或較小規模的升級時,應該更改次版本號;新的修訂號表示這是應該安裝的、與上一版本相容的快速修補項目。 策略文件。asp.net是web.config;應用是myapp.exe.config。可指定替代版本號,用舊版本號對應新版本號。用VS的管理工具插件framework config配置這個文件,配置程序集,選擇程序集,輸入新舊版本號。
  • 使用全局程序集緩存
全局程序集類似全局變量,可供多個應用程序使用。 把程序集部署成全局程序集的過程。管理工具,framework configuration,程序集緩存,添加。
  • 查找程序集
由4處決定使用哪個版本的程序集。應用最初指定的版本;應用的策略文件重寫版本信息;為所有應用重寫的發行者策略文件;系統范圍內的管理員策略文件。 優先級。應用已經使用這個程序集,繼續使用已使用的版本;如果程序集在全局程序集緩存,使用全局的;應用的策略文件里<codebase>指定的程序集。

轉載于:https://www.cnblogs.com/yinlg/p/4904757.html

總結

以上是生活随笔為你收集整理的C#-VS程序集的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。