• .Net之美读书笔记7


    程序集

    定义

    在.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 extern mscorlib 引用的程序集
    .assembly MainClass 当前程序集
    .module MainClass.exe 当前模块
    .file MyFirstModule.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

  • 相关阅读:
    unity remote 连接设置
    cocos2d-x android环境中lua脚本的io操作
    记一次图片存储方式的修改(使用wcf和iis进行图片的上传和发布)
    是时候写点什么了
    VS2012+EF6+Mysql配置心路历程
    MVC中调用Public_Class时,VS2012老提示:当前上下文中不存在名称“Json”的解决方法
    DWZ错误的解决:0x800a13af
    MVC与DWZ整合中部分问题的解决
    MVC+EF6使用MySQL+CodeFirst的详细配置
    XHEditor(MVC4+DWZ) 部分问题的解决
  • 原文地址:https://www.cnblogs.com/LoveTomato/p/8044333.html
Copyright © 2020-2023  润新知