国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Microsoft .NET 框架 FAQ

2024-07-10 12:59:45
字體:
來源:轉載
供稿:網(wǎng)友

microsoft .net 框架 faq


microsoft corporation
2001 年 7 月
摘要:本文包含有關 microsoft .net 和 microsoft .net 框架的常見問題。(共 15 頁打印頁)

內容


概念性問題
運行庫技術問題
    術語
    程序集
    應用程序部署和隔離
    垃圾回收
    遠程處理
    互操作性
    安全性

概念性問題

  • 什么是 .net 框架?

運行庫技術問題

術語

  • 什么是公共語言運行庫 (clr)?
  • 什么是通用類型系統(tǒng) (cts)?
  • 什么是公共語言規(guī)范 (cls)?
  • 什么是 microsoft 中間語言 (msil)?
  • 什么是托管代碼和托管數(shù)據(jù)?

程序集

  • 什么是程序集?
  • 什么是專用程序集和共享程序集?
  • 如果要生成共享程序集,需要簽名和管理密鑰對的系統(tǒng)開銷嗎?
  • 命名空間名稱和程序集名稱之間的差異是什么?

應用程序部署和隔離

  • 哪些選項可用于部署 .net 應用程序?
  • 我已經(jīng)編寫了要在多個應用程序中使用的程序集。在哪里部署它?
  • 如何查看全局程序集緩存中安裝的程序集?
  • 什么是應用程序域?

垃圾回收

  • 什么是垃圾回收?
  • 非確定性的垃圾回收如何影響代碼?
  • 可以避免使用垃圾回收堆嗎?

遠程處理

  • 進程內和進程間通訊在公共語言運行庫中的工作機制是什么?

互操作性

  • 可以在 .net 框架程序中使用 com 對象嗎?
  • 可以在 com 程序中使用 .net 框架組件嗎?
  • 可以在 .net 框架程序中使用 win32 api 嗎?

安全性

  • 為使代碼適用于安全系統(tǒng),必須做哪些工作?
  • 為什么在從網(wǎng)絡共享驅動器運行代碼時收到安全性異常?
  • 如何使代碼在安全系統(tǒng)停止它時運行?
  • 如何管理個人計算機的安全性?如何管理企業(yè)計算機的安全性?
  • 基于證據(jù)的安全性如何與 windows 2000 安全性一起使用?

概念性問題

什么是 .net 框架?


microsoft .net 框架是生成、部署和運行 web 服務及應用程序的平臺。它提供了一個生產(chǎn)率高且基于標準的多語言環(huán)境,用于將現(xiàn)有投資與下一代應用程序和服務集成,同時提供了解決 internet 規(guī)模應用程序的部署和操作難題的靈活性。.net 框架由三個主要部分組成:公共語言運行庫、統(tǒng)一類庫的分層集合和稱為 asp.net 的 active server pages 組件化版本。
返回到頂部

運行庫技術問題

術語

什么是公共語言運行庫 (clr)?


公共語言運行庫是用于 .net 框架應用程序的執(zhí)行引擎。
它提供若干服務,包括:
  • 代碼管理(加載和執(zhí)行)
  • 應用程序內存隔離
  • 類型安全驗證
  • il 到本機代碼的轉換
  • 對元數(shù)據(jù)(增強型類型信息)的訪問
  • 托管對象內存的管理
  • 代碼訪問安全性的強制
  • 異常處理,包括語言間異常
  • 托管代碼、com 對象和預先存在的 dll(非托管代碼和數(shù)據(jù))間的相互操作
  • 對象布局的自動化
  • 對開發(fā)人員服務的支持(分析、調試等等)

返回到頂部

什么是通用類型系統(tǒng) (cts)?


通用類型系統(tǒng)是一個內置在公共語言運行庫中的豐富的類型系統(tǒng),它支持大多數(shù)編程語言中存在的類型和操作。通用類型系統(tǒng)支持廣泛的編程語言的完整實現(xiàn)。
返回到頂部

什么是公共語言規(guī)范 (cls)?


公共語言規(guī)范是一組構造和約束,它充當庫編寫器和編譯器編寫器的向導。它使庫完全可通過任何支持 cls 的語言使用,并使那些語言可以相互集成。公共語言規(guī)范是通用類型系統(tǒng)的一個子集。對于正在編寫將由其他開發(fā)人員使用的代碼的應用程序開發(fā)人員,公共語言規(guī)范也非常重要。當開發(fā)人員按照 cls 規(guī)則設計可公開訪問的 api 時,這些 api 很容易通過面向公共語言運行庫的所有其他編程語言使用。
返回到頂部

什么是 microsoft 中間語言 (msil)?


msil 是與 cpu 無關的指令集,其中編譯進了 .net 框架程序。它包含在對象上加載、存儲、初始化和調用方法的指令。
在與元數(shù)據(jù)及公共類型系統(tǒng)組合后,msil 允許真正的語言間集成。
在執(zhí)行之前,msil 將轉換成機器碼,并且不被解釋。
返回到頂部

什么是托管代碼和托管數(shù)據(jù)?


托管代碼是為面向公共語言運行庫的服務編寫的代碼(請參閱“什么是公共語言運行庫?”)。為了面向這些服務,該代碼必須向運行庫提供最低級別的信息(元數(shù)據(jù))。默認情況下,所有 c#、visual basic .net 和 jscript .net 代碼都受托管。默認情況下,visual studio .net c++ 代碼不受托管,但編譯器可以通過指定命令行開關 (/clr) 來產(chǎn)生托管代碼。
與托管代碼密切相關的是托管數(shù)據(jù)(由公共語言運行庫的垃圾回收器分配和釋放的數(shù)據(jù))。默認情況下,c#、visual basic 和 jscript .net 數(shù)據(jù)受托管。然而,通過使用特殊的關鍵字可以將 c# 數(shù)據(jù)標記為非托管。默認情況下,visual studio .net c++ 數(shù)據(jù)不受托管(即使在使用 /clr 開關時),但在使用 c++ 托管擴展時,可以通過使用 __gc 關鍵字將類標記為托管。正如名稱所暗示的,這意味著用于類實例的內存受垃圾回收器的托管。另外,類成為 .net 框架社區(qū)的一名完全參與的成員,這既帶來了好處,也帶來了限制。其中一個好處是與用其他語言編寫的類的正確互操作性(例如,托管 c++ 類可以從 visual basic 類繼承)。其中一個限制是托管類只能從基類繼承。
返回到頂部

程序集

什么是程序集?


程序集是 .net 框架應用程序的主要構造塊。它是一個功能集合,并以單個實現(xiàn)單元(一個或多個文件)的形式生成、版本化和部署。所有托管類型和資源或者只在其實現(xiàn)單元中標記為可訪問,或者在該單元外由代碼標記為可訪問。
程序集通過其清單(每個程序集不可缺少的部分)進行自我描述。清單可以:
  • 建立程序集標識(以文本名稱的形式)、版本、區(qū)域性和數(shù)字簽名(如果程序集將在應用程序間共享)。
  • 定義組成程序集實現(xiàn)的文件(按名稱和文件散列)。
  • 指定組成程序集的類型和資源,包括從程序集導出的類型和資源。
  • 逐條列出其他程序集上的編譯時依賴項。
  • 指定程序集正確運行所需的權限集。

該信息在運行時用于解析引用、強制版本綁定策略和驗證加載程序集的完整性。運行庫可以確定和定位任何運行對象的程序集,因為每個類型均加載在程序集的上下文中。程序集也是應用代碼訪問安全權限的單元。在確定給程序集包含的代碼授予什么權限時,分別考慮每個程序集的標識證據(jù)。
程序集自我描述的特性也有助于使無影響安裝和 xcopy 部署可行。
返回到頂部

什么是專用程序集和共享程序集?


專用程序集僅由單個應用程序使用,并存儲在該應用程序的安裝目錄中(或其中的子目錄中)。共享程序集是一個可以由多個應用程序引用的程序集。為了共享程序集,必須給予該程序集一個加密的強名稱(有時又稱強名稱),為此目的顯式生成程序集。相比之下,專用程序集名稱只需在使用它的應用程序中是唯一的。
通過區(qū)分專用程序集和共享程序集,我們以顯式?jīng)Q策的形式引入共享概念。只需將專用程序集部署到應用程序目錄,即可保證該應用程序只與用來生成和部署它的位一起運行。對專用程序集的引用只被本地解析到專用應用程序目錄。
可以舉出多個生成和使用共享程序集的理由,如表示版本策略的能力。共享程序集有一個加密的強名稱,這意味著只有此程序集的作者具有產(chǎn)生程序集新版本的密鑰。因此,如果您生成一個策略語句,表明自己希望接受程序集的新版本,則應確信版本更新將受作者的控制和驗證。否則,您不必接受它們。
對于本地安裝的應用程序,共享程序集通常被顯式安裝到全局程序集緩存中(由 .net 框架維護的程序集的本地緩存)。.net 框架版本管理功能的關鍵是:下載的代碼不影響本地安裝的應用程序的執(zhí)行。下載的代碼放置在特殊的下載緩存中,并且在計算機上不是全局可用的,即使以共享程序集的形式生成了某些下載組件。
.net 框架隨附的類均以共享程序集的形式生成。
返回到頂部

如果要生成共享程序集,需要簽名和管理密鑰對的系統(tǒng)開銷嗎?


生成共享程序集的確涉及使用加密密鑰。在生成程序集時,只有公鑰是確實需要的。面向 .net 框架的編譯器在生成程序集時提供命令行選項(或使用自定義屬性)來提供公鑰。常見的做法是在源數(shù)據(jù)庫中保留通用公鑰的一個副本,并將生成腳本指向該密鑰。在交付程序集前,必須用相應的私鑰完全簽名程序集。用稱為 sn.exe(強名稱)的 sdk 工具來完成此工作。
與 authenticode 不同,強名稱簽名不涉及證書。不涉及第三方單位,沒有要支付的費用,也沒有證書鏈。另外,驗證強名稱比驗證 authenticode 的系統(tǒng)開銷低得多。然而,強名稱不就是否信任特定的發(fā)布者做出任何聲明。強名稱使您可以確保給定程序集的內容沒有被篡改,并且在運行時以您的名義加載的程序集來自您開發(fā)時所針對的同一發(fā)布者。但它不就是否可以信任此發(fā)布者的標識做出任何聲明。
返回到頂部

命名空間名稱和程序集名稱之間的差異是什么?


命名空間是類型的邏輯命名方案,此方案中簡單的類型名稱(如 mytype)用以點分隔的分層名稱開頭。這樣的命名方案完全受開發(fā)人員控制。例如,類型 mycompany.fileaccess.a 和 mycompany.fileaccess.b 可能在邏輯上應具有與文件訪問相關的功能。.net 框架使用分層命名方案將類型分為相關功能(例如 asp.net 應用程序框架)或遠程處理功能的邏輯類別。設計工具可以利用命名空間使開發(fā)人員在代碼中瀏覽和引用類型更容易。命名空間的概念與程序集的概念無關。單個程序集可以包含分層名稱具有不同命名空間根的類型,而邏輯命名空間根可以跨越多個程序集。在 .net 框架中,命名空間是邏輯設計時命名便利,而程序集在運行時建立類型的名稱范圍。
返回到頂部

應用程序部署和隔離

哪些選項可用于部署 .net 應用程序?


.net 框架通過使應用程序的無影響安裝和 xcopy 部署切實可行來簡化部署。由于所有請求均首先解析到專用應用程序目錄,只需將應用程序的目錄文件復制到磁盤便可運行該應用程序。不需要任何注冊。
該方案對 web 應用程序、web 服務和獨立的桌面應用程序尤為迫切。然而,在某些情況下,xcopy 作為分發(fā)機制是不充分的。應用程序只有很少的專用代碼并且依賴于共享程序集的可用性,或者應用程序不是在本地安裝的(而是按需下載的)便屬于這種情況。在上述情況下,.net 框架提供大量的代碼下載服務以及與 windows 安裝程序的集成。相對于當前平臺,.net 框架提供的代碼下載支持提供了一些優(yōu)點,包括增量下載、代碼訪問安全性(沒有其他 authenticode 對話框)和應用程序隔離(代表一個應用程序下載的代碼不影響其他應用程序)。windows 安裝程序是另一個可用于 .net 應用程序的功能強大的部署機制。windows 安裝程序的所有功能(包括發(fā)布、公布和應用程序修復)均適用于 windows 安裝程序 2.0 中的 .net 應用程序。
返回到頂部

我已經(jīng)編寫了要在多個應用程序中使用的程序集。在哪里部署它?


將要由多個應用程序使用的程序集(如共享程序集)被部署到全局程序集緩存中。在預發(fā)布版和 beta 版中,使用 gacutil sdk 工具的 /i 選項將程序集安裝到緩存中:
gacutil /i mydll.dll

windows installer 2.0(隨附在 windows xp 和 visual studio .net 中)能夠將程序集安裝到全局程序集緩存。
返回到頂部

如何查看全局程序集緩存中安裝的程序集?


.net 框架提供了一個用于查看程序集緩存的 windows 外殼程序擴展。通過 windows 資源管理器導航至 % windir%/assembly 將激活查看器。
返回到頂部

什么是應用程序域?


應用程序域(通常為 appdomain)是一個用于隔離應用程序的虛擬進程。在同一應用程序范圍內(換句話說,以應用程序入口點開頭的對象激活序列中的任何位置)創(chuàng)建的所有對象都創(chuàng)建在同一應用程序域中。多個應用程序域可以存在于單個操作系統(tǒng)進程中,這使它們成為應用程序隔離的輕量方法。
操作系統(tǒng)進程通過提供一個獨特的內存地址空間來提供隔離。雖然這很有效,但成本很高,而且不能擴展到大型 web 服務器所需的數(shù)目。另一方面,公共語言運行庫通過管理運行在應用程序域中的代碼的內存使用來強制應用程序隔離。這可確保它不會訪問域邊界以外的內存。注意只有類型安全代碼才能以這種方式進行管理(運行庫在不安全代碼加載到應用程序域中時無法保證隔離)很重要。
返回到頂部

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 普洱| 满洲里市| 翼城县| 固阳县| 三明市| 蒙阴县| 孟州市| 准格尔旗| 西宁市| 敦化市| 阿瓦提县| 江山市| 云梦县| 哈尔滨市| 建湖县| 平昌县| 泾源县| 遵义市| 焦作市| 时尚| 仪陇县| 托里县| 隆尧县| 阳新县| 札达县| 葫芦岛市| 彭山县| 太康县| 和政县| 栾城县| 朝阳市| 台北市| 海丰县| 沂南县| 泸溪县| 贵南县| 伊宁县| 如东县| 白城市| 闽侯县| 闸北区|