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:\reps\Clr VIA C#> SN -k MyCompany.snk
  3. 可以将公钥文件输出到一个公钥文件中去
  4. PS C:\reps\Clr VIA C#> SN -p MyCompany.snk MyCompany.PublicKey sha256
    PS C:\reps\Clr 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的属性中的签名
  • 使用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:\Windows\Microsoft.NET\assembly\GAC_MSIL\S7.Net\v4.0_1.0.0.0__d5812d469e84c693

然后在注册表中注册

计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\S7.NET

没有的项就新建

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

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>
  • 发布者策略控制

clr via c# 程序集的更多相关文章

  1. CLR中的程序集加载

    CLR中的程序集加载 本次来讨论一下基于.net平台的CLR中的程序集加载的机制: [注:由于.net已经开源,可利用vs2015查看c#源码的具体实现] 在运行时,JIT编译器利用程序集的TypeR ...

  2. 【CLR】详解CLR中的程序集

    目录结构: contents structure [+] 程序集的简介 为程序集分配强名称 如何指定程序集的版本资源信息 如何对程序集签名 全局程序集缓存 如何查看程序集的信息 强命名程序集防串改 1 ...

  3. C#程序集系列12,C#编译器和CLR如何找寻程序集

    本篇体验C#编译器和CLR运行时如何查找程序集,并自定义CLR运行时查找程序集的方式. □ C#编译器和CLR运行时如何查找程序集 C#编译器在哪里?--在C:\Windows\Microsoft.N ...

  4. clr via c# 程序集加载和反射(2)

    查看,clr via c# 程序集加载和反射(1) 8,发现类型的成员: 字段,构造器,方法,属性,事件,嵌套类型都可以作为类型成员.其包含在抽象类MemberInfo中,封装了所有类型都有的一组属性 ...

  5. 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响

    1.CLR首次加载代码造成的性能损失 四.CLR执行程序集中代码介绍了CLR在首次执行一个类的时,会初始化一个内部结构,然后当目标方法被首次调用时,JITComplier函数(JIT编译器)会验证IL ...

  6. clr via c# 程序集加载和反射集(一)

    1,程序集加载---弱的程序集可以加载强签名的程序集,但是不可相反.否则引用会报错!(但是,反射是没问题的) //获取当前类的Assembly Assembly.GetEntryAssembly() ...

  7. Clr Via C#读书笔记---程序集的加载和反射

    #1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef ...

  8. C# CLR及程序集部署浅析

    摘 要 .NET Framework 到底是什么?公共语言运行时和 .NET Framework 类库分别指的是什么东西?CLR. CLS. CTS.FCL等这些又是什么?为什么出现程序集的概念?它与 ...

  9. [CLR via C#]1.2 将托管模块合并成程序集

    原文:[CLR via C#]1.2 将托管模块合并成程序集 1.CLR是不和托管模块一起工作的,CLR是和程序集一起工作的. 2. 程序集是一个或多个托管模块/资源文件的逻辑性分组.   3. 程序 ...

随机推荐

  1. freemark 基本使用

    实际上用程序语言编写的程序就是模板. FTL (代表FreeMarker模板语言). 这是为编写模板设计的非常简单的编程语言. 模板(FTL编程)是由如下部分混合而成的: 文本:文本会照着原样来输出. ...

  2. 练习2-15 求简单交错序列前N项和 (15 分)

    练习2-15 求简单交错序列前N项和 (15 分) 本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和. 输入格式: 输入在一行中给出一个正整数N. 输出格 ...

  3. eclipse编写代码所遇到的问题

    spring方面: 1.Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListabl ...

  4. 机器学习(ML)九之GRU、LSTM、深度神经网络、双向循环神经网络

    门控循环单元(GRU) 循环神经网络中的梯度计算方法.当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸.虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题.通常由于这个原因, ...

  5. Codeforces 961C Chessboard(将碎了的、染色乱了的棋盘碎片拼一起)

    题目链接:点击打开链接 Magnus decided to play a classic chess game. Though what he saw in his locker shocked hi ...

  6. 虚拟机 .NAT模式下 配置静态ip后无法ping域名,但可以ping公网ip 问题处理

    在之前的文章 https://www.cnblogs.com/dxxdsw/p/10643540.html 中,在虚拟机中给linux配置了静态ip.[.NAT模式] centos系统: 今天连接发现 ...

  7. yukongDSRM账户安全防护

    一.DSRM简介 1.DSRM(Diretcory Service Restore Mode,目录服务恢复模式)是windows域环境中域控制器的安全模式启动选项.域控制器的本地管理员账户也就是DSR ...

  8. Unity酱~ 卡通渲染技术分析(二)

    前面的话 上一篇Unity酱~ 卡通渲染技术分析(一) 写了CharaMain.cginc,服装的渲染是怎么实现的.这篇来分析一下头发跟皮肤的实现 头发 本来以为unitychan的头发会有各向异性的 ...

  9. Redis(十):pub/sub 发布订阅源码解析

    谈到发布订阅模式,相信不会陌生,典型的观察者模式的实现.然而从表面来看,本地实现一个wait/notify通知.register/update调用, 实现一个远程mq服务, 还有本文说的 pub/su ...

  10. apache 负载均衡

    此次使用mod_proxy的方式来实现的,因为在Apache2以上的版本中已经集成了,因此不需要再另行安装和配置了. 只需要把注释去掉即可,去掉以下模块的注释: LoadModule proxy_mo ...