Windows .net全局程序集缓存 (GAC) 的使用

2023-11-17  本文已影响0人  CodingCode
  1. 定义assembly的在GAC中的属性

为一个assembly生成一个key:

C:\> sn -k myassembly.key

生成一个key文件,这个文件会被配置到assembly的配置文件里面。

定义assembly的配置属性(AssemblyInfo.cs):

using System.Reflection;
using System.Runtime.CompilerServices;

[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: AssemblyVersion("1.0.0.1")]

[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("myassembly.key")]
[assembly: AssemblyKeyName("")]

和assemble源代码文件和配置属性文件一起编译:

C:\> csc.exe /out:myassembly.dll /target:library myassembly.cs AssemblyInfo.cs
  1. 安装
C:\> gacutil.exe /i path\to\myassembly.dll

安装到的目的路径为:%windir%\Microsoft.NET\assembly,其下有三个子目录:

GAC_32   : for assemblies targeting 32-bit.
GAC_64   : for assemblies targeting 64-bit.
GAC_MSIL : for assemblies targeting 'Any' platform.

在上述例子中,因为没有指定target,所以会被安装到GAC_MSIL目录下面:

GAC_MSIL
       + myassembly
                  + v4.0_1.0.0.1__26893dcbecf3cd71
                                                 + myassembly.dll

其中1.0.0.1是在配置文件中定义的版本,而26893dcbecf3cd71是key值。

  1. 使用

安装完之后就是如何使用了。目前所知道的是(不完全准确,需要更新):

  1. csc.exe编译的时候并不能直接使用GAC中的dll
    所以还需要传统本地目录下面有一份dll,然后通过/reference:path\to\dll来引用。
  2. GAC中的dll会在运行时自动搜索,所以也就不需要把assembly拷贝到可执行程序相同目录,或者配置.exe.config文件了。
  1. 删除和查询
C:\> gacutil.exe /u <assembly-name>
C:\> gacutil.exe /l <assembly-name>
上一篇下一篇

猜你喜欢

热点阅读