日期:2013-07-09  浏览次数:20371 次

Microsoft .NET 框架 FAQ


Microsoft Corporation
2001 年 7 月
摘要:本文包含有关 Microsoft .NET 和 Microsoft .NET 框架的常见问题。(共 15 页打印页)

内容


概念性问题
运行库技术问题
    术语
    程序集
    应用程序部署和隔离
    垃圾回收
    远程处理
    互操作性
    安全性

概念性问题

  • 什么是 .NET 框架?

运行库技术问题

术语

  • 什么是公共语言运行库 (CLR)?
  • 什么是通用类型系统 (CTS)?
  • 什么是公共语言规范 (CLS)?
  • 什么是 Microsoft 中间语言 (MSIL)?
  • 什么是托管代码和托管数据?

程序集

  • 什么是程序集?
  • 什么是专用程序集和共享程序集?
  • 如果要生成共享程序集,需要签名和管理密钥对的系统开销吗?
  • 命名空间名称和程序集名称之间的差异是什么?

应用程序部署和隔离

  • 哪些选项可用于部署 .NET 应用程序?
  • 我已经编写了要在多个应用程序中使用的程序集。在哪里部署它?
  • 如何查看全局程序集缓存中安装的程序集?
  • 什么是应用程序域?

垃圾回收

  • 什么是垃圾回收?
  • 非确定性的垃圾回收如何影响代码?
  • 可以避免使用垃圾回收堆吗?

远程处理

  • 进程内和进程间通讯在公共语言运行库中的工作机制是什么?

互操作性

  • 可以在 .NET 框架程序中使用 COM 对象吗?
  • 可以在 COM 程序中使用 .NET 框架组件吗?
  • 可以在 .NET 框架程序中使用 Win32 API 吗?

安全性

  • 为使代码适用于安全系统,必须做哪些工作?
  • 为什么在从网络共享驱动器运行代码时收到安全性异常?
  • 如何使代码在安全系统停止它时运行?
  • 如何管理个人计算机的安全性?如何管理企业计算机的安全性?
  • 基于证据的安全性如何与 Windows 2000 安全性一起使用?

概念性问题

什么是 .NET 框架?


Microsoft .NET 框架是生成、部署和运行 Web 服务及应用程序的平台。它提供了一个生产率高且基于标准的多语言环境,用于将现有投资与下一代应用程序和服务集成,同时提供了解决 Internet 规模应用程序的部署和操作难题的灵活性。.NET 框架由三个主要部分组成:公共语言运行库、统一类库的分层集合和称为 ASP.NET 的 Active Server Pages 组件化版本。
返回到顶部

运行库技术问题

术语

什么是公共语言运行库 (CLR)?


公共语言运行库是用于 .NET 框架应用程序的执行引擎。
它提供若干服务,包括:
  • 代码管理(加载和执行)
  • 应用程序内存隔离
  • 类型安全验证
  • IL 到本机代码的转换
  • 对元数据(增强型类型信息)的访问
  • 托管对象内存的管理
  • 代码访问安全性的强制
  • 异常处理,包括语言间异常
  • 托管代码、COM 对象和预先存在的 DLL(非托管代码和数据)间的相互操作
  • 对象布局的自动化
  • 对开发人员服务的支持(分析、调试等等)

返回到顶部

什么是通用类型系统 (CTS)?


通用类型系统是一个内置在公共语言运行库中的丰富的类型系统,它支持大多数编程语言中存在的类型和操作。通用类型系统支持广泛的编程语言的完整实现。
返回到顶部

什么是公共语言规范 (CLS)?


公共语言规范是一组构造和约束,它充当库编写器和编译器编写器的向导。它使库完全可通过任何支持 CLS 的语言使用,并使那些语言可以相互集成。公共语言规范是通用类型系统的一个子集。对于正在编写将由其他开发人员使用的代码的应用程序开发人员,公共语言规范也非常重要。当开发人员按照 CLS 规则设计可公开访问的 API 时,这些 API 很容易通过面向公共语言运行库的所有其他编程语言使用。
返回到顶部

什么是 Microsoft 中间语言 (MSIL)?


MSIL 是与 CPU 无关的指令集,其中编译进了 .NET 框架程序。它包含在对象上加载、存储、初始化和调用方法的指令。
在与元数据及公共类型系统组合后,MSIL 允许真正的语言间集成。
在执行之前,MSIL 将转换成机器码,并且不被解释。
返回到顶部

什么是托管代码和托管数据?


托管代码是为面向公共语言运行库的服务编写的代码(请参阅“什么是公共语言运行库?”)。为了面向这些服务,该代码必须向运行库提供最低级别的信息(元数据)。默认情况下,所有 C#、Visual Basic .NET 和 JScript .NET 代码都受托管。默认情况下,Visual Studio .NET C++ 代码不受托管,但编译器可以通过指定命令行开关 (/CLR) 来产生托管代码。
与托管代码密切相关的是托管数据(由公共语言运行库的垃圾回收器分配和释放的数据)。默认情况下,C#、Visual Basic 和 JScript .NET 数据受托管。然而,通过使用特殊的关键字可以将 C# 数据标记为非托管。默认情况下,Visual Studio .NET C++ 数据不受托管(即使在使用 /CLR 开关时),但在使用 C++ 托管扩展时,可以通过使用 __gc 关键字将类标记为托管。正如名称所暗示的,这意味着用于类实例的内存受垃圾回收器的托管。另外,类成为 .NET 框架社区的一名完全参与的成员,这既带来了好处,也带来了限制。其中一个好处是与用其他语言编写的类的正确互操作性(例如,托管 C++ 类可以从 Visual Basic 类继承)。其中一个限制是托管类只能从基类继承。
返回到顶部

程序集

什么是程序集?


程序集是 .NET 框架应用程序的主要构造块。它是一个功能集合,并以单个实现单元(一个或多个文件)的形式生成、版本化和部署。所有托管类型和资源或者只在其实现单元中标记为可访问,或者在该单元外由代码标记为可访问。
程序集通过其清单(每个程序集不可缺少的部分)进行自我描述。清单可以:
  • 建立程序集标识(以文本名称的形式)、版本、区域性和数字签名(如果程序集将在应用程序间共享)。
  • 定义组成程序集实现的文件(按名称和文件散列)。
  • 指定组成程序集的类型和资源,包括从程序集导出的类型和资源。
  • 逐条列出其他程序集上的编译时依赖项。
  • 指定程序集正确运行所需的权限集。

该信息在运行时用于解析引用、强制版本绑定策略和验证加载程序集的完整性。运行库可以确定和定位任何运行对象的程序集,因为每个类型均加载在程序集的上下文中。程序集也是应用代码访问安全权限的单元。在确定给程序集包含的代码授予什么权限时,分别考虑每个程序集的标识证据。
程序集自我描述的特性也有助于使无影响安装和 XCOPY 部署可行。
返回到顶部

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


专用程序集仅由单个应用程序使用,并存储在该应用程序的安装目录中(或其中的子目录中)。共享程序集是一个可以由多个应用程序引用的程序集。为了共享程序集,必须给予该程序集一个加密的强名称(有时又称强名称),为此目的显式生成程序集。相比之下,专用程序集名称只需在使用它的应用程序中是唯一的。
通过区分专用程序集和共享程序集,我们以显式决策的形式引入共享概念。只需将专用程序集部署到应用程序目录,即可保证该应用程序只与用来生成和部署它的位一起运行。对专用程序集的引用只被本地解析到专用应用程序目录。
可以举出多个生成和使用共享程序集的理由,如表示版本策略的能力。共享程序集有一个加密的强名称,这意味着只有此程序集的作者具有产生程序集新版本的密钥。因此,如果您生成一个策略语句,表明自己希望接受程序集的新版本,则应确信版本更新将受作者的控制和验证。否则,您不必接受它们。
对于本地安装的应用程序,共享程序集通常被显式安装到全局程序集缓存中(由 .NET 框架维护的程