• .NET框架程序设计生成,打包,部署及管理应用程序与类型(2:Assembly的生成以及版本信息)


    [接上篇(有空研究研究托管PE与非托管PE的区别)]


    .NET框架程序设计--生成,打包,部署及管理应用程序与类型(2:Assembly的生成以及版本信息)

    (三)将模块(.netmodule)组合成为程序集(Assembly:.exe;.dll)

    程序集是包含一个或者多个类型和资源文件的集合。

    程序集与模块(.netmodule)的最大区别就是其拥有一个清单.

    正是程序集拥有了清单,其才可以直接与CLR打交道,CLR最先加载这些程序集,利用清单获得程序集的其他文件。

    特性:
    ·程序集定义了可重用类型(可重用)
    ·程序集标识有一个版本号(可实施版本策略)
    ·程序集可以包含与之相关的安全信息(安全策略)

    一般我们编译小型程序的时候,会把其编译成为一个程序集,较大的程序包括了很多的文件。
    多文件程序集的原因(或者说优点):
    (1)我们可以把类型分开管理。
    (2)根据需要向程序集中添加资源或数据文件。
    (3)让程序集包含一些不同语言生成的类型。

    怎样编译一个不包含清单的PE文件?
    csc /target:module App1.cs
    生成app1.netmodule

    怎样使用.netmodule文件?
    必须把它连接到一个包含清单的文件中
    csc /target:library /addmodule:app1.module app2.cs
    这里使用了连接,说明生成的app2.dll并不能脱离app1.netmodule,即并不是把app1.netmodule的内容add到了app2.dll文件中。

    如果编译器不支持/addmodule可以使用AL.exe

    (四)程序集版本信息



    可以直接利用VS来编辑程序集的版本信息。

    程序集包括3个版本号信息,他们的格式相同:
    例如:2.5.719.2
    主版本号:2
    次版本号:5
    生成版本号(内部版本号):719
    修订版本号:2

    前两个版本号组成了面向公众的版本部分.这个程序集的公众版本是2.5。
    第三个版本号表示如果在一天内重新生成程序集(不管生成多少次,都作为一次对待),那么这个版本号就会增加。
    第四个版本号表示一天内的每次重新生成程序集,那么这个版本号就会增加(好像无规律增加)。

    通过csc这样的命令编译器或者AL.exe连接器并不会改变程序集的版本,但他们支持随编译来增加相应的版本,另外,通过VS编译的程序,其主版本号和次版本号是1.0,不会随着编译而改变,但是后两个版本号会随着编译而相应的增加,自动增加并没有什么好用途,我们应该手动设置这四个版本号。

    令人遗憾的是程序集包含三个版本信息
    AssemblyFileVersion
    AssemblyInformationVersionAttribute
    AssemblyVersion
    前两者CLR既不查看也不关心。
    重要的是AssemblyVersion:
    这个版本存储与AssemblyDef清单中,当绑定强命名程序集的时候,该版本信息唯一标识该程序集,它所引用的所有其他程序集的AssemblyVersion会被记录在AssemblyVersion中。

  • 相关阅读:
    python中list/tuple/dict/set的区别
    jquery修改ajax的header的字段origin方法,均被浏览器拒绝
    js判断上传文件的大小、类型、修改日期等信息
    js调试方法
    sqlmapapi的跨域访问Access-Control-Allow-Origin:*;ajax
    flask的文件上传和下载
    flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法
    python读写csv时中文乱码问题解决办法
    css中!important的作用
    项目经验——Sql server 数据库的备份和还原____还原数据库提示“介质集有2个介质簇,但只提供了1个。必须提供所有成员” .
  • 原文地址:https://www.cnblogs.com/caca/p/55221.html
Copyright © 2020-2023  润新知