• clr via c# 程序集


    1,程序集的种类

    • 强命名程序集 使用了公钥进行签名 可以应用CLR的安全策略。---可以全局部署---可以部署到一些公认位置。
    • 弱命名程序集 只能私有部署----部署到应用程序基目录或其子目录中

    2,为程序集分配强名称

       强命名程序集有4个重要特征---程序集显式名称

        “MyTypes,Version=1.0.8123.0,Culture=neutral,publicKeyToken=b77a7c761934e089”

    • 文件名:MyTypes.exe or MyTypes.dll
    • 版本号
    • 语言
    • 公钥---标识技术

    3,创建强程序集

    1. 使用 SN.EXE 创建 在目录下创建密钥文件:MyCompany.snk
    2. PS C:
      epsClr VIA C#> SN -k MyCompany.snk
    3. 可以将公钥文件输出到一个公钥文件中去
    4. PS C:
      epsClr VIA C#> SN -p MyCompany.snk MyCompany.PublicKey sha256
      PS C:
      epsClr VIA C#> SN -tp .MyCompany.PublicKey
      Microsoft(R) .NET Framework 强名称实用工具 版本 4.0.30319.0
      版权所有(C) Microsoft Corporation。保留所有权利。
      
      公钥(哈希算法: sha256):
      002400000c8000009400000006020000002400005253413100040000010001005d78d177c10143
      8f68c31edc10f3f13d20a1065302831f606e5300913b234c246b41176ca426d2ca5e5f69dee43c
      05d19d577a199868a82c0ab0da5c8900250e4d435d98a222d2a10db055eb526b7521ef4979d858
      a616cb3565a12e7be7a4a4528af38267f9b0adc52bb91e43f09000d380ed07abea82d8c7e30dce
      89ed46ab
      
      公钥标记为 595a9e13589e00b9

            

      3,创建程序集的几个办法----官网链接

    •         在VS的属性中的签名
    • image
    • 使用CSC编译器
    • csc /t:library UtilityLibrary.cs /keyfile:sgKey.snk
    • 使用AL链接器
      al /out:MyAssembly.dll MyModule.netmodule /keyfile:sgKey.snk
    • 使用定制属性---要在同个目录
      [assembly:AssemblyKeyFileAttribute("keyfile.snk")]  

    4,部署强命名程序集

          gacutil.exe---使用详解---必须管理员模式打开VS,打开powshell。

          进入到dll所在目录

    gacutil.exe /i s7.net

      然后在这个位置查看到其存在

    C:WindowsMicrosoft.NETassemblyGAC_MSILS7.Netv4.0_1.0.0.0__d5812d469e84c693

    然后在注册表中注册

    计算机HKEY_LOCAL_MACHINESOFTWAREMicrosoft.NETFrameworkv4.0.30319AssemblyFoldersExS7.NET

    image

    没有的项就新建

    5,然后在引用的搜索里面就可以看到了

    image

    6,运行时如何解析引用类型:

          使用ILDASM.EXE 并且在视图---查看字节----然后点击MAIN方法

    .method private hidebysig static void  Main(string[] args) cil managed
    // SIG: 00 01 01 1D 0E
    {
      .entrypoint
      // 方法在 RVA 0x2050 处开始
      // 代码大小       17 (0x11)
      .maxstack  8
      IL_0000:  /* 72   | (70)000001       */ ldstr      "hi"
      IL_0005:  /* 28   | (0A)00000F       */ call       void [mscorlib]System.Console::WriteLine(string)
      IL_000a:  /* 28   | (0A)000010       */ call       valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey()
      IL_000f:  /* 26   |                  */ pop
      IL_0010:  /* 2A   |                  */ ret
    } // end of method Program::Main
    
    
    

       使用视图----元信息----显示(^M)

    TypeRef #17 (01000011)
    -------------------------------------------------------
    Token:             0x01000011
    ResolutionScope:   0x23000001
    TypeRefName:       System.Console
    	MemberRef #1 (0a00000f)
    	-------------------------------------------------------
    		Member: (0a00000f) WriteLine:
    		CallCnvntn: [DEFAULT]
    		ReturnType: Void
    		1 Arguments
    			Argument #1:  String
    	MemberRef #2 (0a000010)
    	-------------------------------------------------------
    		Member: (0a000010) ReadKey:
    		CallCnvntn: [DEFAULT]
    		ReturnType: ValueClass System.ConsoleKeyInfo
    		No arguments.
    

    7,管理控制

    •    利用配置文件设定程序集
      • <?xml version="1.0" encoding="utf-8"?>
        <configuration>
          <runtime>
            <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
              <probing privatePath="AuxFiles"/>
            </assemblyBinding>
        
          </runtime>
            <startup>
                <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
            </startup>
        </configuration>
    • 发布者策略控制

      略

  • 相关阅读:
    mysql导入导出数据过大命令
    thinkphp条件查询
    php表单提交安全方法
    ubuntu软件(查看文件差异)
    thinkphp if标签
    thinkphp导出报表
    jquery.easing.js下载地址
    水平手风琴切换效果插件亲自试过很好用
    li ie6/7 3px bug
    placeholder兼容IE6-9代码
  • 原文地址:https://www.cnblogs.com/frogkiller/p/12241387.html
Copyright © 2020-2023  润新知