Delphi 版本号集中但其他信息分散

Delphi Version number central but other info decentral

背景

Upto RS10.3 我曾经使用 Andreas Hausladen DDevExtensions 将我的项目源中的版本号设置为所有模块都相同 (bpl's/exe),但不幸的是 Andreas 有停止为 RS10.4 及更高版本更新他的工具。

所以我正在寻找比使用 NotePad++ 对所有 dproj 文件应用多文件更改更舒适的方法来在我的应用程序模块中设置版本号。

但是...另一方面,我确实想保留特定于模块文件的特定信息(如文件描述等)。

我也喜欢但不是真正的要求是让我的 (c) 通知和其他共享信息集中在一个文件中(最好是 .rc)还有。

从 dproj 文件中删除版本信息(维护起来很麻烦)并为每个模块创建一个特定的 .rc 文件不是问题。

另一个优点是拥有一个中央版本号和 (c) 文件在 svn 更改管理中也好很多,因为我不必提交每个 .dproj 文件,因为 version/build 号码变化。

调查

(随时更新) 我签出

但这些解决方案并不是我真正想要的;我不是在寻找脚本,而是在寻找源 file/project 文件方式来完成我的任务。

这是Q

我怎样才能拥有一个包含我的版本 number 的单个 .rc 文件并在包含特定版本信息的其他 .rc 文件中使用它

啊没想到这么简单... 我创建了两个 .rc 文件,一个共享信息为 #defines SharedVersionDefs.rc:

#define VER_MAJ 1
#define VER_MIN 2
#define VER_SUB 3
#define VER_BUILD 8

#define VER_FILEVERSION             VER_MAJ,VER_MIN,VER_SUB,VER_BUILD
#define VER_FILEVERSION_STR         ""VER_MAJ,VER_MIN,VER_SUB,VER_BUILD"[=10=]"

// in my app file and product version are the same
#define VER_PRODUCTVERSION          VER_MAJ,VER_MIN,VER_SUB,VER_BUILD
#define VER_PRODUCTVERSION_STR      ""VER_MAJ,VER_MIN,VER_SUB,VER_BUILD"[=10=]"

#define VER_COMPANYNAME_STR "MyCompany[=10=]"
#define VER_LEGALCOPYRIGHT_STR "(c) 2020 "VER_COMPANYNAME_STR"[=10=]"

和一个特定文件(对于每个具有不同名称和内容的模块会重新出现)SpecificVersion.rc:

/* Use the shared version info from a central file */
#include "SharedVersionDefs.rc"


#ifndef DEBUG
#define VER_DEBUG                   0
#else
#define VER_DEBUG                   VS_FF_DEBUG
#endif

VS_VERSION_INFO VERSIONINFO
FILEVERSION     VER_FILEVERSION
PRODUCTVERSION  VER_PRODUCTVERSION

BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904E4"
        BEGIN
            VALUE "CompanyName",      VER_COMPANYNAME_STR
            VALUE "FileDescription",  "Specific file description"
            VALUE "FileVersion",      VER_FILEVERSION_STR
            VALUE "InternalName",     "Specific internal name"
            VALUE "LegalCopyright",   VER_LEGALCOPYRIGHT_STR
            VALUE "ProductName",      "LCCAMQM"
            VALUE "ProductVersion",   VER_PRODUCTVERSION_STR
        END
    END

    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1252
    END
END

只需创建这 2 个文件,将 delphi dproj 文件中的版本信息设置为 OFF,然后将特定的 .rc 文件添加到我希望它出现的模块的 dproj 中,在这种情况下一个小的 delphi 项目:

program VersionInfoTest;

{$R 'SpecificVersion.res' 'SpecificVersion.rc'}

uses
  Vcl.Forms,
  uMain in 'uMain.pas' {frmMain},
  uVerinfo in 'uVerinfo.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;
end.

而且我验证了这有效。

注意:由于RSP-13486,您还需要将 .rc 文件添加到 .dproj 文件中。只需使用 IDE.

拖放到其中

有关 .rc 文件和示例的更多信息可在 MSDN

上找到