更改已编译.NET程序集中的程序集版本

更改已编译.NET程序集中的程序集版本,.net,.net,简单的问题。。。是否有方法更改已编译.NET程序集的程序集版本 事实上,我可以用一种方法更改程序集文件的版本。为什么要这样做?如果是为了让另一个应用程序可以使用它,那么您可能需要研究它。听起来您的过程很繁重,因为您必须更新多个AssemblyInfo文件。您是否考虑过在项目之间共享相同的AssemblyInfo文件? 给出了一个很好的例子来说明如何做到这一点 一旦你有了一个文件,你就可以通过一个构建过程使用或更新你的单一AssemblyInfo版本来完成额外的工作。你可以使用: ILMerge.

简单的问题。。。是否有方法更改已编译.NET程序集的程序集版本


事实上,我可以用一种方法更改程序集文件的版本。

为什么要这样做?如果是为了让另一个应用程序可以使用它,那么您可能需要研究它。

听起来您的过程很繁重,因为您必须更新多个AssemblyInfo文件。您是否考虑过在项目之间共享相同的AssemblyInfo文件? 给出了一个很好的例子来说明如何做到这一点

一旦你有了一个文件,你就可以通过一个构建过程使用或更新你的单一AssemblyInfo版本来完成额外的工作。

你可以使用:

ILMerge.exe Foo.dll/ver:1.2.3.4/out:Foo2.dll 这样做的一个有效原因是,在您发现的破坏性更改(例如使用NDepend)中,在构建中增加程序集版本。这样,如果没有破坏性的更改,程序集版本将保持不变,并且您可以轻松地修补发布的版本


我们总是增加文件版本,这反映了版本号

如果您有正式的测试和源代码控制,那么这个过程将变得相当简单。首先要了解谁可以更改版本的不同数字段,以及何时更改。网络组件有4个数字段(即1.0.0.1)

第一段包含主要版本号。这是由高层管理人员设置的,表示应用程序的UI或平台发生了重大变化。程序集版本和文件版本之间的编号应始终相同

第二段包含次要版本号,也称为功能发布号。这是由项目管理设置的,表示应用程序中已添加了新功能。程序集版本和文件版本之间的编号应始终相同

第三段包含内部版本号。这是由测试组设置的,表示应用程序已准备好部署。它在发布错误修复之前被更改。发布新版本时,测试会将第四段重置为0。程序集版本和文件版本之间的数字可以相同,但程序集版本通常保留为0,以简化对现有部署的修补

第四部分包含修订号。每当开发小组将新代码签入源代码管理时,他们都会设置这个参数。此编号将包含在已编译DLL的文件版本中,但不包含在程序集版本中


我发现,这有助于部署人员、测试人员和开发人员跟踪最新版本,而无需互相干涉。不幸的是,我也曾与使用静态版本控制系统的公司合作过,因此没有人真正知道最新、最好的程序集是什么。

,如本文所述,它简单而有效。

旧主题,但这里是我的5维

  • 拆开

    ildasm my.exe/output:my.il/metadata

  • 编辑my.il以更改版本信息。 有几个地方可以考察:

    • 主要:次要:修订:构建-通常一次出现
    • major.minor.revision.build-多次出现。该字符串位于实际行之后的注释部分。版本是字节数组中的十六进制值。例如:
  • .custom instance void[mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(字符串)=(01 00 07352E312E332E3000)/5.1.3.0..

  • 编辑my.res以更改版本信息。 双击并使用visual studio进行编辑。非常简单的程序

  • 集合

    ilasm my.il/res:my.res


  • 奇怪的人错过了。它是专门为破解文件资源而设计的。因此,它还将帮助您编辑部件信息,包括文件版本

    使用系统;
    使用System.Windows.Forms;
    使用系统诊断;
    公共级rh
    {
    公共静态void Main()
    {
    程序集更改器(“file_path.exe”);
    }
    私有静态字符串rc()
    {
    字符串FileVersion=“6,8,0,1”;
    返回“1版本信息”
    +“\n文件版本”+文件版本
    +“\n产品版本0,0,0,0”
    +“\n文件操作系统0x4”
    +“\n文件类型0x1”
    +“\n{BLOCK\'StringFileInfo\'{BLOCK\'000004b0\'{}}BLOCK\'VarFileInfo\'{VALUE\'Translation\',0x0000 0x04B0}}”;
    }
    公共静态无效程序集\u转换器(字符串exe)
    {
    System.IO.File.writealText(“details.rc”,rc());
    进程(“reshacker.exe”,“-open details.rc-save resources.res-action compile-log num”);
    进程(“reshacker.exe”,“-open\”“+exe+”\”-resource resources.res-save\”“+exe+”\-action addoverwrite-mask\“Version info\”);
    }
    公共静态bool进程(字符串文件名、字符串参数)
    {
    使用(流程=新流程())
    {
    process.StartInfo.FileName=文件名;
    process.StartInfo.Arguments=args;
    process.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
    process.Start();
    process.WaitForExit();
    }
    返回true;
    }   
    }
    
    对于部署,我们更新AssemblyInfo文件并进行完整重建,但这太繁重了,因此我们将转向增量构建。问题是确定要更新的AssemblyInfo,所以现在我们不更新增量版本。不,部署仍然是完全干净的构建。请给我一些信用!增量只是用于连续的内部构建。问题是人们不知道他们正在查看/测试哪个版本,除非它是一个完全干净的版本,并且有更新的AssemblyInfo。如果它只是为了内部目的,你可以 ILMerge.exe Foo.dll /ver:1.2.3.4 /out:Foo2.dll