C# 面试题 目录

C# 中强命名程序集 (Strong-Named Assembly) 的概念和用途

推荐答案

在C#中,强命名程序集(Strong-Named Assembly)是指使用公钥/私钥对进行签名的程序集。强命名程序集具有以下特点:

  1. 唯一标识:强命名程序集通过名称、版本号、文化信息和公钥来唯一标识,避免了程序集名称冲突的问题。
  2. 完整性验证:强命名程序集在加载时会验证其完整性,确保程序集在发布后未被篡改。
  3. 版本控制:强命名程序集支持严格的版本控制,确保应用程序加载正确的程序集版本。

强命名程序集的主要用途包括:

  • 防止程序集被篡改:通过签名,可以确保程序集在发布后未被修改。
  • 支持并行加载:强命名程序集可以与其他版本的程序集并行加载,避免版本冲突。
  • 增强安全性:强命名程序集可以部署到全局程序集缓存(GAC)中,供多个应用程序共享,同时确保程序集的安全性。

本题详细解读

强命名程序集的生成

要生成强命名程序集,首先需要生成一个强名称密钥文件(.snk文件),然后使用该文件对程序集进行签名。以下是生成强命名程序集的步骤:

  1. 生成密钥文件

    该命令会生成一个名为MyKey.snk的密钥文件。

  2. 在项目中使用密钥文件: 在项目的AssemblyInfo.cs文件中,添加以下代码:

    或者在项目文件中指定密钥文件:

  3. 编译项目: 编译项目时,编译器会使用指定的密钥文件对程序集进行签名,生成强命名程序集。

强命名程序集的验证

强命名程序集在加载时会进行以下验证:

  1. 签名验证:验证程序集的签名是否有效,确保程序集未被篡改。
  2. 版本验证:验证程序集的版本号是否与应用程序要求的版本号匹配。

强命名程序集的部署

强命名程序集可以部署到全局程序集缓存(GAC)中,供多个应用程序共享。部署到GAC中的程序集必须具有强名称。部署步骤如下:

  1. 将程序集添加到GAC

    该命令会将MyAssembly.dll添加到GAC中。

  2. 从GAC中移除程序集

    该命令会从GAC中移除MyAssembly

强命名程序集的局限性

尽管强命名程序集提供了许多优势,但也存在一些局限性:

  • 密钥管理复杂:强命名程序集依赖于密钥文件,密钥文件的管理和分发可能变得复杂。
  • 版本控制严格:强命名程序集的版本控制非常严格,可能导致版本冲突或兼容性问题。
  • 无法撤销签名:一旦程序集被签名,就无法撤销签名,除非重新编译程序集。

通过理解强命名程序集的概念和用途,开发者可以更好地管理和部署C#应用程序中的程序集。

纠错
反馈