clr via c# 程序集
1,程序集的种类
- 强命名程序集 使用了公钥进行签名 可以应用CLR的安全策略。---可以全局部署---可以部署到一些公认位置。
- 弱命名程序集 只能私有部署----部署到应用程序基目录或其子目录中
2,为程序集分配强名称
强命名程序集有4个重要特征---程序集显式名称
“MyTypes,Version=1.0.8123.0,Culture=neutral,publicKeyToken=b77a7c761934e089”
- 文件名:MyTypes.exe or MyTypes.dll
- 版本号
- 语言
- 公钥---标识技术
3,创建强程序集
- 使用 SN.EXE 创建 在目录下创建密钥文件:MyCompany.snk
- 可以将公钥文件输出到一个公钥文件中去
PS C:\reps\Clr VIA C#> SN -k MyCompany.snk
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 /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# 程序集的更多相关文章
- CLR中的程序集加载
CLR中的程序集加载 本次来讨论一下基于.net平台的CLR中的程序集加载的机制: [注:由于.net已经开源,可利用vs2015查看c#源码的具体实现] 在运行时,JIT编译器利用程序集的TypeR ...
- 【CLR】详解CLR中的程序集
目录结构: contents structure [+] 程序集的简介 为程序集分配强名称 如何指定程序集的版本资源信息 如何对程序集签名 全局程序集缓存 如何查看程序集的信息 强命名程序集防串改 1 ...
- C#程序集系列12,C#编译器和CLR如何找寻程序集
本篇体验C#编译器和CLR运行时如何查找程序集,并自定义CLR运行时查找程序集的方式. □ C#编译器和CLR运行时如何查找程序集 C#编译器在哪里?--在C:\Windows\Microsoft.N ...
- clr via c# 程序集加载和反射(2)
查看,clr via c# 程序集加载和反射(1) 8,发现类型的成员: 字段,构造器,方法,属性,事件,嵌套类型都可以作为类型成员.其包含在抽象类MemberInfo中,封装了所有类型都有的一组属性 ...
- 五、CLR加载程序集代码时,JIT编译器对性能的产生的影响
1.CLR首次加载代码造成的性能损失 四.CLR执行程序集中代码介绍了CLR在首次执行一个类的时,会初始化一个内部结构,然后当目标方法被首次调用时,JITComplier函数(JIT编译器)会验证IL ...
- clr via c# 程序集加载和反射集(一)
1,程序集加载---弱的程序集可以加载强签名的程序集,但是不可相反.否则引用会报错!(但是,反射是没问题的) //获取当前类的Assembly Assembly.GetEntryAssembly() ...
- Clr Via C#读书笔记---程序集的加载和反射
#1 加载程序集 Assembly.Load: public class Assembly { public static Assembly Load(AssemblyName assemblyRef ...
- C# CLR及程序集部署浅析
摘 要 .NET Framework 到底是什么?公共语言运行时和 .NET Framework 类库分别指的是什么东西?CLR. CLS. CTS.FCL等这些又是什么?为什么出现程序集的概念?它与 ...
- [CLR via C#]1.2 将托管模块合并成程序集
原文:[CLR via C#]1.2 将托管模块合并成程序集 1.CLR是不和托管模块一起工作的,CLR是和程序集一起工作的. 2. 程序集是一个或多个托管模块/资源文件的逻辑性分组. 3. 程序 ...
随机推荐
- SpringCloud与微服务Ⅱ --- 微服务概述
一.什么是微服务 1) Martin Fowler论文对微服务的阐述(中文版) 2) 对单一应用进行拆分 3) 每一个独立的应用都有一个独立的进程 4) 拥有自己独立的数据库 5) 微服务化的核心就是 ...
- Oracle 11g 单实例静默安装实战记录(linux)
oracle 11g 单实例静默安装 AUTHOR:Oracle_Ran 环境规划: OS Version : Red Hat Enterprise Linux Server release 6.7 ...
- linux入门系列9--用户管理及文件权限控制
前面文章分享了Linux下常用命令以及Shell编程相关知识,本节继续学习Linux用户管理及文件权限控制. Linux是多用户多任务操作系统,具有很好的稳定性和安全性.既然是多用户,那就意味 ...
- linux下手动安装/升级GCC到较高版本
一.环境 VMWare+Centos7 二.写在前面的话 安装GCC最简单的方式当然是[yum -y install gcc]但是我的机器上安装下来后,其版本是4.8.5,感觉有点低,所以想升级一下( ...
- Flink与HanLP集成使用
自然语言处理是机器学习的一个重要分支,在智能翻译.智能问答.舆情监控.ChatOps等都有很好的应用场景,目前比较好的一个开源实现工具是何晗大神的HanLP,主页(http://hanlp.com/) ...
- 1.3.4分析你的第一个Android程序——Android第一行代码(第二版)笔记
切换项目结构模式 Project模式的项目结构 我们将项目切换成Project模式,这就是真实的目录结构. .gradle和.idea 这两个目下放置的都是Android Studio自动生成的一些文 ...
- frp内网穿透协助内网程序(如微信相关)开发
众所周知,在本机上开发微信相关的程序,很不方便,因为拨号IP随机,而且很多端口不支持,如80,443 所以,有必要使用一台外网主机中转. frp就可以解决此问题 安装环境,外网服务器:腾讯云,cent ...
- 【大白话系统】MySQL 学习总结 之 缓冲池(Buffer Pool) 如何支撑高并发和动态调整
如果大家对我的 [大白话系列]MySQL 学习总结系列 感兴趣的话,可以点击关注一波. 一.上节回顾 在上节< 缓冲池(Buffer Pool) 的设计原理和管理机制>中,介绍了缓冲池整体 ...
- RFC笔记,IPv6 Node Requirements
Request for Comments: 6434,IPv6 Node Requirements 路由器节点必须能够生成链路本地地址 5.9.2. IPv6 Stateless Address Au ...
- k8s集群PHP环境使用
一.环境介绍 k8s版本: 1.15.2 存储: 阿里云NAS 测试代码: wordpress 二.下载wordpress和创建好数据库等 1.下载wordpress wget https://cn. ...