zoukankan      html  css  js  c++  java
  • .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中。

  • 相关阅读:
    优化SQL查询:如何写出高性能SQL语句
    提高SQL执行效率的16种方法
    Spring Ioc DI 原理
    java内存泄漏
    转:js闭包
    LeetCode Best Time to Buy and Sell Stock III
    LeetCode Best Time to Buy and Sell Stock with Cooldown
    LeetCode Length of Longest Fibonacci Subsequence
    LeetCode Divisor Game
    LeetCode Sum of Even Numbers After Queries
  • 原文地址:https://www.cnblogs.com/caca/p/55221.html
Copyright © 2011-2022 走看看