总结: 如何将程序集(dll)安装到全局程序集缓存(GAC)中

本文介绍如何将DLL文件部署到全局程序集缓存(GAC),并详细讲解了给项目添加强名称的三个步骤,包括生成密钥、关联密钥与项目程序集以及重新生成项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    针对一些类库项目或用户控件项目(一般来说,这类项目最后编译生成的是一个或多个dll文件),在程序开发完成后,有时需要将开发的程序集(dll文件)安装部署到GAC(全局程序集缓存)中,以便其他的程序也可以调用。

    一般来说,将程序集(dll)安装到GAC中有以下两种方法:

1.  手动将要安装部署的dll文件拖至C:/windows/assembly文件夹下。
2.  使用gacutil.exe工具安装。gacutil -i "要注册的dll文件全路径"。
    如在命令行输入: gacutil -i D:/myDLLDemo/IvanDemo.dll

但是,在进行上述安装过程之前,我们必须保证此项目具有强名称才可以。

    给项目添加强名称需要以下三步:

1. 在项目调试完成后,使用sn.exe工具生成一个密钥。sn -k "生成的密钥的全路径"。
    如在命令行输入: sn -k D:/myKey.snk
2. 将密钥与项目的程序集进行关联: 项目属性-->签名-->为程序集签名-->选择强名称密钥文件。
    此外, 还有另外一种方法,就是在项目的AssemblyInfo.cs文件中,修改"AssemblyKeyFile"的属性。
    如: [assembly:AssemblyKeyFile("D://myKey.snk")]
3. 重新生成项目集。

BTW: gacutil.exe, sn.exe等工具一般在VS.Net2005/SDK/v2.0/Bin目录下。

<think>好的,用户想了解如何确保jxAspx.dll正确部署到Mono的GAC中。首先,我需要回顾一下Mono处理GAC的流程。Mono的GAC路径通常在/usr/lib/mono/gac,每个程序集有自己的子目录,结构是名称/版本__公钥标记。所以部署的时候需要创建正确的目录结构,并把DLL放进去,同时可能需要用到gacutil工具安装。 接下来,用户可能遇到的问题可能包括路径不正确、权限不足,或者程序集没有强名称。Mono要求GAC中的程序集必须有强名称,所以用户需要先用sn -k生成密钥对,然后编译时签名。如果用户没有做这一步,部署到GAC会失败,所以需要检查这一点。 然后,步骤应该是:首先确保程序集有强名称,使用gacutil -i安装,或者手动创建目录结构并复制文件。安装后,可以用gacutil -l检查是否安装成功。另外,可能需要设置环境变量MONO_PATH,确保运行时能找到程序集。还有权限问题,可能需要sudo来执行安装命令。 用户可能遇到的常见错误包括忘记签名,目录结构错误,或者没有更新GAC导致应用程序找不到DLL。此外,如果使用手动复制,必须确保目录和版本信息正确。另外,部署后可能需要重启应用或服务器,或者重新加载配置,才能使更改生效。 最后,可能需要验证是否真的部署成功,除了gacutil -l,还可以在代码中尝试引用该程序集,或者查看Mono的日志是否有加载错误。另外,用户可能需要知道如何从GAC中移除程序集,使用gacutil -u,但这个问题可能后续才会出现。总结步骤,强调强名称、正确目录结构、安装工具使用和验证方法。</think>### 如何确保 jxAspx.dll 正确部署到 Mono 的 GAC 中? #### 步骤说明 1. **验证程序集强名称** Mono 的 GAC 要求所有程序集必须包含强名称(Strong Name)。使用以下命令生成密钥对并签名: ```bash sn -k keypair.snk ``` 在编译时通过编译器参数引用密钥文件(如 C# 使用 `/keyfile:keypair.snk`)。 2. **使用 gacutil 工具安装** Mono 提供 `gacutil` 工具管理 GAC。执行以下命令安装: ```bash gacutil -i jxAspx.dll ``` 若提示权限不足,需添加 `sudo` 前缀。 3. **手动部署(备用方案)** - 定位 Mono 的 GAC 目录:`/usr/lib/mono/gac` - 创建程序集专用目录结构:`jxAspx/[版本号]__[公钥哈希]` 例如: ```bash mkdir -p /usr/lib/mono/gac/jxAspx/1.0.0.0__a1b2c3d4e5f6 cp jxAspx.dll /usr/lib/mono/gac/jxAspx/1.0.0.0__a1b2c3d4e5f6 ``` 4. **验证安装结果** 通过以下命令检查是否列出 `jxAspx`: ```bash gacutil -l | grep jxAspx ``` 5. **运行时配置** 确保应用程序的 `Web.config` 或环境变量包含: ```xml <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <qualifyAssembly partialName="jxAspx" fullName="jxAspx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1b2c3d4e5f6" /> </assemblyBinding> </runtime> </configuration> ``` #### 常见问题排查 - **错误 "Assembly must be strongly named"** 未正确签名程序集,需重新执行步骤 1[^1]。 - **GAC 中可见但应用程序仍报错** 检查程序集版本、公钥标记是否与引用完全一致,或尝试清除 Mono 程序集缓存: ```bash rm -rf ~/.config/.mono/assemblies ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值