Номер версии Delphi центральный, но другая информация децентрализована

Фон

До RS10.3 я использовал DDevExtensions Андреаса Хаусладена, чтобы установить номер моей версии в исходниках проекта на будет одинаковым для всех модулей (bpl's / exe), но, к сожалению, Андреас перестал обновлять свой инструмент для RS10.4 и более поздних версий.

Поэтому я ищу более удобные способы установки номера версии в модулях моего приложения, чем применение многофайловых изменений ко всем файлам dproj с помощью NotePad ++.

Но ... С другой стороны, я хочу сохранить конкретную информацию (например, описание файла и т. Д.), Относящуюся к файлу модуля.

Что мне также хотелось бы, но на самом деле это не требование, - это чтобы мое (c) уведомление и другая общая информация также были централизованы в одном файле (желательно .rc).

Не проблема удалить информацию о версии из файлов dproj (которые в любом случае сложно поддерживать) и вместо этого иметь специальный файл .rc для каждого модуля.

Еще одно преимущество заключается в том, что наличие одного центрального номера версии и (c) файла также намного лучше при управлении изменениями svn, поскольку мне не нужно фиксировать каждый файл .dproj из-за изменения номера версии / сборки.

Расследование

(Будет обновляться по мере продвижения) Я проверил

Но эти решения на самом деле не то, что я ищу; Я ищу не сценарии, а способ выполнения моей задачи исходным файлом / файлом проекта.

Итак, вопрос

Как я могу иметь один единственный файл .rc, содержащий номер моей версии, и использовать его в других файлах .rc, содержащих информацию о конкретной версии


person H.Hasenack    schedule 26.06.2020    source источник


Ответы (1)


Ах, я не ожидал, что это будет так просто ... Я создал два файла .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"

И один конкретный файл (который будет снова появляться для каждого модуля с разными именами и содержимым) 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

person H.Hasenack    schedule 26.06.2020
comment
Для меня это не удается, когда одно из значений состоит более чем из одной цифры. - person FredS; 01.07.2020
comment
@FredS Это странно, в моем приложении номер сборки (теперь 4 цифры bij) проходит нормально. (Для де VER_BUILD определите) - person H.Hasenack; 01.07.2020
comment
Когда я открываю файл RES в Visual Studio, я вижу обе записи в StringFileInfo для FileVersion и ProductVersion как . В диалоговом окне «Свойства» правильно отображается FileVersion, но поскольку эта запись в StringFileInfo НЕ требуется, я думаю, что это просто значения по умолчанию. Версия продукта отображается в свойствах как . - person FredS; 01.07.2020
comment
@FredS Это вполне могло быть, не пробовал. Меня больше всего интересовало сохранение версии # в одном файле для моего gazillion # bpl. - person H.Hasenack; 01.07.2020
comment
@FredS Я проверяю свои выходные DLL, BPL и EXE относительно всех ресурсов с помощью angusj.com/resourcehacker. Если найду время, проверю. На самом деле я не проверял сами файлы .res. - person H.Hasenack; 02.07.2020
comment
Похоже, что в brcc есть ошибки в определениях. Вы не можете повторно использовать VER_MAJ и т.д., определенные в VER_FILEVERSION_STR, но должны определить его напрямую как строку (таким образом, реплицируя номер версии) - person H.Hasenack; 26.08.2020