如何将版本信息嵌入到Windows二进制文件中?

时间:2009-06-10 14:28:02

标签: visual-studio-2005

您可能知道Windows有这个选项,您可以在其中查看二进制文件的属性,它将显示有关作者,版本号,公司等的信息......我们希望将其放入我们的自动编译系统中。在编译二进制文件之后将此版本信息添加到二进制文件中是可取的,但是有关如何完成此操作的任何信息都会有所帮助。当然,这需要是程序化的;我们不能打扰每天手动将信息输入资源黑客5000个二进制文件。

有没有人曾经这样做过?怎么可能呢?

4 个答案:

答案 0 :(得分:10)

看起来最好的解决方案(至少对我们来说)是使用RC文件。

1 VERSIONINFO
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "File Version",      "1.0.4"
            VALUE "Build Number",     "3452"
        END
    END
END

将其编译成.res文件

rc.exe /fo Results/version.res version.rc

然后将其与其他目标文件链接。

答案 1 :(得分:3)

查找项目的AssemblyInfo.cs。

但是这必须在编译之前填写。但是您可以在许多二进制文件之间共享一个AssemblyInfo.cs。并且您不必使用这个确切的文件名 - 因此您可以将信息拆分为更多文件...一个关于公司的常规文件,一个关于产品的文件,一个关于二进制文件版本的文件。

/ Individual Information
[assembly: AssemblyTitle( "" )]
[assembly: AssemblyDescription( "" )]

// Version information
[assembly: AssemblyVersion( "1.0.*" )]
[assembly: AssemblyInformationalVersion( "1.0.0.0" )]

// General Information
[assembly: AssemblyConfiguration( "" )]
[assembly: AssemblyCompany( "" )]
[assembly: AssemblyProduct( "" )]
[assembly: AssemblyCopyright( "" )]
[assembly: AssemblyTrademark( "" )]
[assembly: AssemblyCulture( "" )]
[assembly: NeutralResourcesLanguage( "en" )]

答案 2 :(得分:1)

昨天刚出现在CodeProject上:

Simple Version Resource Tool for Windows

这是一个命令行工具,但应该可以通过脚本轻松操作。

答案 3 :(得分:0)

假设Windows PE二进制文件,版本信息存储在PE标题中,位于IMAGE_OPTIONAL_HEADER部分下的位置:

WORD MajorImageVersion
WORD MinorImageVersion

关于this documentation所说的内容:

用户可定义的字段。这允许您具有不同版本的EXE或DLL。您可以通过链接器/ VERSION开关设置这些字段。例如,“LINK /VERSION:2.0 myobj.obj”