分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

.Net之美读书笔记6

发布时间:2023-09-06 01:30责任编辑:郭大石关键词:暂无标签

程序集

定义

在.Net框架下,类似C#这样的高级语言经过编译后生成的结果文件被成为程序集(后缀名为.exe或.dll)。

程序集的组成

  • PE/COFF头 使Windows操作系统能够加载并运行
  • CLR头 告诉系统是.Net程序集
  • 清单(manifest) 程序集标识可通过反编译查看
  • 元数据 内容包括程序集包含的模块、类型等
  • CIL代码
  • 资源文件

程序集反编译

  1. 通过“vs开发人员命令提示”编译cs文件。
    csc MyClass.cs编译命令,可为编译制定的参数
参数类型样例意义
/t:library编译为dll库文件
/out:MyClass.dll输出文件
/r:MyClass.dll引用程序集
/addmodule:MyFirstModuldle.netModule加载模块
/resource:ResourceDemo.resx加载资源
/keyfile:key加密钥
  1. 程序集反编译CIL代码
    ildam /out:1.txt MainClass.exe可以将MainClass.exe程序集反编译到1.txt文件。
指令名样例意义
.assembly externmscorlib引用的程序集
.assemblyMainClass当前程序集
.moduleMainClass.exe当前模块
.fileMyFirstModule.netmodule引用模块

多模块程序集

用vs编译的程序集都为但模块程序集,但是一个程序集中可以包含多个模块。新建 MyFirstMOdule.cs MySecondModule.cs文件分别将其编译为模块,MainClass引用。

using System;class MyFirstModule{ ???public static void Hello() ???{ ???????Console.WriteLine("Hello,I am from Module 1"); ???}}
using System;class MySecondModule{ ???public static void Hello() ???{ ???????Console.WriteLine("Hello,I am from Module 2"); ???}}
using System;class MainClass{ ???static void Main() ???{ ???????MyFirstModule.Hello(); ???}}

编译命令csc /t:module /out:MyFirstModule.netmodule MyFirstModule.cscsc /t:module /out:MySecondModule.netmodule MySecondModule.cscsc /addmodule:MyFirstModule.netmodule,MySecondModule.netmodule MainClass.cs
使用模块的好处,运行时可以删除不需要的模块,这样减少了模块的加载。(不过作者推荐用多个小程序集)

强名称程序集

  1. 程序集的版本
    为程序集指定版本,方便以后更改。
  2. 使用公/私钥防止程序集被篡改
    将自己的类库使用密钥编译,防止其他人伪造,伪造的不能运行。这里有点困惑,如果将加密的dll文件反编译为txt,修改内容在和扩展名为il,再编辑为dll,可以篡改。

    全局程序集缓存

    将多处引用的dll程序集,加入全局缓存区提高效率。加入缓存区gacutil i MyClass.dll,退出缓存区gacutil u MyClass.dll

.Net之美读书笔记6

原文地址:http://www.cnblogs.com/LoveTomato/p/8044333.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved