zoukankan      html  css  js  c++  java
  • 私有程序集与共享程序集

     私有程序集:
    •默认情况下,C# 程序编译为私有程序集
    •需要放在应用程序所在的文件夹中
    •程序集的名称在应用程序中应当是唯一的
     共享程序集:
    •可以被不同的应用程序共享
    •在所有使用程序集的应用程序中,程序集名称应当是唯一的
    •放在全局程序集缓存中

    全局程序集缓存(GAC): 计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享。在全局程序集缓存中部署的应用程序必须具有强名称。

    GAC全称是Global   Assembly   Cache,他的作用是可以存放一些有很多程序都要用到的公共Assembly,例如System.Data、System.Windows.Forms等等。这样,很多程序就可以从GAC里面取得Assembly,而不需要再把所有要用到的Assembly都拷贝到应用程序的执行目录下面。举例而言,如果没有GAC,那么势必每个WinForm程序的目录下就都要从C:WINDOWSMicrosoft.NETFrameworkv1.0.3705下面拷贝一份System.Windows.Forms.dll,这样显然不如都从GAC里面取用方便,也有利于Assembly的升级和版本控制。

    除了系统默认放置在GAC中的Assembly如System.Windows.Forms以外,我们也可以添加自己的Assembly:

    1)创建一个strong-name的Assembly,例如ToolbarComponent.dll。

    2)运行gacutil   -i   ToolbarComponent.dll,把这个Assembly添加到GAC。

    3)在程序中动态装载: System.Reflection.Assembly   ass=Assembly.Load( "ToolbarComponent,   Version=1.0.934.20434,   Culture=neutral,   PublicKeyToken=65f45658c8d4927f "); MessageBox.Show( "Is   the   assembly   loaded   from   GAC?   "+ass.GlobalAssemblyCache)。

    在上面的程序中,ToolbarComponent就是从GAC装载而不是从程序的运行目录下的dll文件中装载,程序目录下不需要放置ToolbarComponent.dll程序也能正常运行。另外,Assembly.Load()中的参数可以通过 "gacutil   -l "查到。

    另外,上面提到了GAC中的Assembly必须是strong-name的。创建strong-name的Assembly的步骤大致如下:

    a)   在命令行运行“sn   -k   keyPair.snk”创建一个密钥文件。这里的sn.exe也是.NET附带的一个工具。

    b)   在VS.NET里面修改“AssemblyInfo.cs”文件: [assembly:   AssemblyDelaySign(false)]   [assembly:   AssemblyKeyFile( "..\..\keyPair.snk ")]   c)   编译项目,就能得到一个strong-name的Assembly。

    .NET   Framework中附带了一些和GAC有关的工具,其中包括:

    1)Gacutil.exe,一个命令行的工具,用于在GAC中浏览、添加、删除Assembly。

    2)Ngen.exe,也是一个命令行的工具,用于在GAC中创建Native   Image。

    3)mscorcfg.msc,一个MMC终端,可以图形化完成Gacutil.exe的主要功能。

    从命令行查看GAC,可以看到内部有很多目录结构,GAC_32主要存放x86的一些代码缓存,GAC_64主要存放x64的一些相关dll。

    MSDN中有一些对GAC的介绍,可以参考:

    1)《Assembly   Cache   Viewer   (Shfusion.dll)》

    2)《Global   Assembly   Cache》

  • 相关阅读:
    window.clearInterval与window.setInterval的用法
    <a href=“#”>
    DIV+CSS 中的 overflow:hidden
    @media screen
    VS2010程序打包操作--超详细
    Easy CHM使用简明教程
    垃圾纸盒的叠法-超级实用
    IOS 3D UI --- CALayer的transform扩展
    CGContextAddArc
    CGPathAddArc
  • 原文地址:https://www.cnblogs.com/zhangxl/p/4455717.html
Copyright © 2011-2022 走看看