• 使用 Gacutil.exe 将.Net程序集添加到GAC的方法


    使用gacutil.exe工具安装:gacutil -i "要注册的dll文件全路径"

    "gacutil.exe”工具为.NET自带工具 ,需要注意的是:这个工具在.NET Framework 运行时中并不包含。他是SDK的一部分。 例如在 .NET Framework 2.0 时,我们就要单独下载 .NET Framework 2.0 SDK,或者装了 Visual Studio 后才会具有这个工具。

    在开始运行中输入"cmd”进入命令窗口,通过CD选择到"gacutil.exe”文件所在的目录,

    或者 使用Visual Studio 命令提示符

    如在命令行输入: gacutil -i D:/Microsoft.SharePoint.dll

    可以输入‘gacutil -?’查看帮助

    存放GAC中程序集的路径有两个:

    C:Windowsassembly

    C:WindowsMicrosoft.NETassembly

    用gacutil注册的程序集会放在第二个目录C:WindowsMicrosoft.NETassembly下

    但是,注意:不能将一个弱命名程序集安装到GAC中。在进行上述2-3种方法安装过程之前,我们必须保证此项目具有强名称才可以。
        给项目添加强名称需要以下三步:
    1. 在项目调试完成后,使用sn.exe工具生成一个密钥。sn -k "生成的密钥的全路径"。
        如在命令行输入: sn -k D:/myKey.snk
    2. 将密钥与项目的程序集进行关联: 项目属性-->签名-->为程序集签名-->选择强名称密钥文件。
        此外, 还有另外一种方法,就是在项目的AssemblyInfo.cs文件中,修改"AssemblyKeyFile"的属性。
        如: [assembly:AssemblyKeyFile("D://myKey.snk")]
    3. 重新生成项目集。

    如何在Visual Studio中引用自己注册的GAC:


    将.dll添加到GAC后,在C:WINDOWSassembly或C:WindowsMicrosoft.NETassembly下可以看到,但在Visual Studio的添加引用选项卡里看不到,解决办法有两个:


    方案一:在“添加引用”对话框中显示程序集
    即使已将程序集安装到全局程序集缓存 (GAC) 中,“添加引用”对话框也不会自动显示每个程序集。“添加引用”对话框基于路径并要求添加注册表项,该项指定要显示的程序集的位置。

    在“添加引用”对话框中显示程序集 
    添加以下注册表项之一,其中 <AssemblyLocation> 是要在“添加引用”对话框中显示的程序集目录,例如 C:\MyAssemblies。
    [HKEY_CURRENT_USERSOFTWAREMicrosoft.NETFramework<version>AssemblyFoldersExMyAssemblies]@="<AssemblyLocation>"
    [HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFramework<version>AssemblyFoldersExMyAssemblies]@="<AssemblyLocation>"

    注意 
    在 HKEY_LOCAL_MACHINE 配置单元下创建注册表项以后,所有用户都可以在“添加引用”对话框的指定位置看到程序集。在 HKEY_CURRENT_USER 配置单元下创建注册表项只会影响当前用户的设置。
    重新启动 Visual Studio。 

    例如,我们将System.Data.SQLite.dll用gacutil加入GAC后,添加如下注册表信息:

    然后重启Visual Studio,然后在添加引用选项卡中搜索:SQLite,可以看到如下搜索结果:

    添加该程序集到项目,查看System.Data.SQLite的属性

    我们可以看到属性窗口显示的Path就是我们用gacutil注册System.Data.SQLite到GAC的文件地址。


      

    方案二:可以把你的DLL复制到.NET   Framework目录(%WINDIR%Microsoft.NETFrameworkv1.x.yyyy)中,这样的话.可以达到你的目的.   但是,MS建议我们不应该将自己的assembly拷贝到Framework目录中。

    一个更好的方法就是把它们放在一个单独的目录中,然后给Windows   Registry添加一个key,告诉VS.NET在哪里可以找到这些assembly。除了核心的Framework   assembly外,VS.NET也可以显示在以下这些Registry   key中列出的目录中的任何assembly:HKEY_CURRENT_USERSoftwareMicrosoft.NETFrameworkAssemblyFolders   
    HKEY_LOCAL_MACHINESoftwareMicrosoft.NETFrameworkAssemblyFolders   
    HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio7.1AssemblyFolders   
    HKEY_LOCAL_MACHINESoftwareMicrosoftVisualStudio7.1AssemblyFolders   

  • 相关阅读:
    php极光网络一键登录(yii框架)
    Sublime Text3将多行转为为一行 | Sublime Text 快速分别独立选中多行
    mysql 将时间戳转换成日期格式
    Vant主题定制修改颜色样式
    TypeError: this.getOptions is not a function 引入less一直报错
    export defaul 和 export定义和区别
    Vue vant引入,tabbar封装使用示例
    php去除富文本编辑器中的内容格式
    ES6:高级数组函数,filter/map/reduce
    [BZOJ2793][Poi2012]Vouchers
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/8082654.html
Copyright © 2020-2023  润新知