C#学习第24天:程序集和部署

程序集知识点


1.程序集的基本概念

  • 程序集是部署和版本控制的最小单位。
  • 它可以是可执行文件(.exe)或动态链接库(.dll)。
  • 包含元数据和清单(Manifest),描述程序集的内容和依赖关系。

2.程序集清单

  • 包含程序集的名称、版本、文化和公钥。
  • 列出程序集所包含的所有模块和类型。
  • 描述程序集对其他程序集的依赖。

3.强名称程序集

  • 使用强名称为程序集签名以确保其唯一性和安全性。
  • 包括程序集的简单名称、版本号、文化信息和公钥。
  • 使用 SN.exe 工具生成密钥对。

4.程序集版本控制

  • 支持主版本、次版本、内部版本和修订版本。
  • 使用 [assembly: AssemblyVersion("1.0.0.0")] 属性指定版本。
  • 支持绑定重定向以解决版本冲突。

5.程序集的类型

  • 私有程序集:存放在应用程序目录,供单个应用程序使用。
  • 共享程序集:存放在全局程序集缓存(GAC),可供多个应用程序共享。

6.程序集的部署

  • 私有程序集直接复制到应用程序目录。
  • 共享程序集需通过 GAC 工具注册。

Visual Studio示例


1. 创建一个类库项目

  1. 打开 Visual Studio。
  2. 选择"创建新项目"。
  3. 选择"类库(.NET Framework)"模板。
  4. 输入项目名称,例如 MyLibrary,选择保存位置,然后点击"创建"。
cs 复制代码
namespace MyLibrary
{
    public class Greeter
    {
        public string SayHello(string name)
        {
            return $"Hello, {name}!";
        }
    }
}

2. 设置程序集信息

  1. 在"解决方案资源管理器"中,找到 Properties,打开 AssemblyInfo.cs 文件。
cs 复制代码
using System.Reflection;
using System.Runtime.InteropServices;

[assembly: AssemblyTitle("MyLibrary")]
[assembly: AssemblyDescription("示例程序集")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("MyCompany")]
[assembly: AssemblyProduct("MyLibraryProduct")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: ComVisible(false)]
[assembly: Guid("d9b1c3e2-b1e3-4ef1-8d91-2f6402c050f3")]

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

3. 为程序集签名(强名称)

  1. 在"解决方案资源管理器"中右键点击项目 MyLibrary,选择"属性"。
  2. 切换到"签名"选项卡,勾选"为程序集签名"。
  3. 点击"新建..."创建一个新的密钥文件,输入名称(例如 MyLibraryKey),并设置密码(可选)。

4. 生成程序集

  1. 点击"生成"菜单,选择"生成解决方案"。

5. 使用程序集

创建一个新的"控制台应用程序"项目来引用并使用 MyLibrary。

  1. 在解决方案上右键点击,选择"添加" -> "新建项目"。
  2. 选择"控制台应用程序"模板,输入项目名称(例如 MyApp)。
  3. 在"解决方案资源管理器"中,右键点击 "MyApp" 项目,选择"添加" -> "项目引用"。
  4. 勾选 MyLibrary 项目。

在 Program.cs 中使用 MyLibrary:

cs 复制代码
using System;
using MyLibrary;

class Program
{
    static void Main()
    {
        Greeter greeter = new Greeter();
        Console.WriteLine(greeter.SayHello("World"));
    }
}

6. 运行程序

按下 Ctrl + F5 运行 MyApp 项目,应该会在控制台输出:

cs 复制代码
Hello, World!

7. (可选) 将程序集添加到 GAC

如果你希望将程序集添加到 GAC(全局程序集缓存),请使用"开发者命令提示符"执行以下命令:

cs 复制代码
gacutil -i "path\to\MyLibrary.dll"

使用场景


应用程序更新和版本管理:

  • 通过程序集版本控制和部署策略,便捷地管理应用程序的更新。

代码复用:

  • 使用共享程序集提高代码的复用性,减少冗余。

分布式部署:

  • 使用ClickOnce或安装程序,简化复杂应用程序的部署过程。

通过这,你可以在 Visual Studio 中创建和使用一个强名称的 C# 程序集,并在另一个项目中引用和使用它。如果有任何其他问题或需要进一步的解释,请随时问我!

相关推荐
liulilittle14 分钟前
C++ i386/AMD64平台汇编指令对齐长度获取实现
c语言·开发语言·汇编·c++
Thomas_YXQ1 小时前
Unity URP法线贴图实现教程
开发语言·unity·性能优化·游戏引擎·unity3d·贴图·单一职责原则
The_cute_cat1 小时前
Ajax和Axios的初步学习
前端·学习·ajax
Zz_waiting.1 小时前
Javaweb - 10.4 ServletConfig 和 ServletContext
java·开发语言·前端·servlet·servletconfig·servletcontext·域对象
Touper.1 小时前
JavaSE -- 泛型详细介绍
java·开发语言·算法
sun0077001 小时前
std::forward作用
开发语言·c++·算法
amazinging1 小时前
北京-4年功能测试2年空窗-报培训班学测开-第四十三天
python·学习
一名用户2 小时前
unity实现梦日记式传送组件
后端·c#·unity3d
Zhen (Evan) Wang2 小时前
(豆包)xgb.XGBRegressor 如何进行参数调优
开发语言·python
祁思妙想2 小时前
八股学习(五)---MySQL
学习