H.H*_*ack 7 delphi resource-files fileversioninfo rad-studio
背景
在 RS10.3 之前,我曾经使用 Andreas Hausladen DDevExtensions将我的项目源中的版本号设置为所有模块(bpl's/exe)都相同,但不幸的是,Andreas 已停止为 RS10.4 及更高版本更新他的工具。
因此,与使用 NotePad++ 对所有 dproj 文件应用多文件更改相比,我正在寻找更舒适的方法来在我的应用程序模块中设置版本号。
但是...另一方面,我确实希望保留特定于模块文件的特定信息(如文件描述等)。
我还要什么喜欢但是,这不是一个真正的要求是有我的(C)的通知,和其他共享信息,以在一个文件中(最好是.RC)也可集中进行。
从 dproj 文件中删除版本信息(无论如何维护起来都很痛苦)并为每个模块提供一个特定的 .rc 文件不是问题。
另一个优点是拥有一个中央版本号和 (c) 文件在 svn 更改管理中也好得多,因为我不必因为版本/内部版本号更改而提交每个 .dproj 文件。
调查
(随着我们的进行更新)我签出
但这些解决方案并不是我真正想要的。我不是在寻找脚本,而是寻找源文件/项目文件的方式来完成我的任务。
所以这是Q
我如何拥有一个包含我的版本号的.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"\0"
// 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"\0"
#define VER_COMPANYNAME_STR "MyCompany\0"
#define VER_LEGALCOPYRIGHT_STR "(c) 2020 "VER_COMPANYNAME_STR"\0"
Run Code Online (Sandbox Code Playgroud)
和一个特定文件(对于每个具有不同名称和内容的模块,它会重新出现)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
Run Code Online (Sandbox Code Playgroud)
只需要创建这 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.
Run Code Online (Sandbox Code Playgroud)
我证实这有效。
注意:由于RSP-13486,您还需要将 .rc 文件添加到 .dproj 文件中。只需使用 IDE 拖放到那里即可。
有关 .rc 文件和示例的更多信息可以在MSDN上找到