我需要将我的delphi项目的版本设置为与另一个项目(不是delphi)相同的构建脚本的一部分。有没有办法通过IDE来控制版本号,例如编译器的命令行参数或类似的东西?由于更改构建时的版本号
回答
包括像
{$R 'version.res'}
在您的项目
线。并用您的版本信息创建一个version.rc文件。你将不得不使用brcc32在老的Delphi版本中自己构建资源。在较新的Delphi版本中,您可以使用
{$R 'version.res' 'version.rc'}
让IDE自动为您构建它。
最简单的version.rc看起来是这样的:
1 VERSIONINFO
FILEVERSION 9999, 9999, 99, 18048
PRODUCTVERSION 9999, 9999, 99, 18048
FILEOS 0x00000004L // comment: VOS_WINDOWS32
FILETYPE VFT_APP
{
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x409, 0x4E4 // comment: 0x4E4 = 1252
}
BLOCK "StringFileInfo"
{
BLOCK "040904E4"
{
VALUE "CompanyName", "Company Name\0"
VALUE "FileVersion", "9999.9999.99.18048\0"
VALUE "LegalCopyright", "Copyright \0"
VALUE "ProductName", "Product Name\0"
VALUE "ProductVersion", "9999.9999.99.18048\0"
VALUE "Homepage", "http://www.mydomain.com\0"
}
}
}
欲了解更多信息,请参阅MSDN上3210结构。
+1,因为这是我使用的解决方案,但您确实需要确保删除version.res,否则对version.rc的更改不会被链接器注意到。 –
@BrianFrost:你使用的是什么版本的Delphi?我从来没有遇到过这个问题。你确实在项目选项中关闭了“包含版本信息”? –
我的错误。我发现当我移动到* .rc中的#include以用于版本编号时,我需要删除* .res,所以我没有修改* .rc而是只包含我的包含文件,它只有实际的版本号。 –
Marjan在上面给出了一个很好的答案,但我的回答稍微回答了一些问题。考虑这个RC文件:
VS_VERSION_INFO VERSIONINFO
#include "..\Ver_Num_Application.txt"
#define APPLICATION_NAME "My amazing project\0"
#define VER_NUM_ARTWORKS 4
#include "..\Libraries\Paslib32\Ver_Num_Library.txt"
#define COMPANY_NAME "My company\0"
FILEVERSION VER_NUM_ARTWORKS, VER_NUM_LIBRARY, VER_NUM_APPLICATION, 1000
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x9L
#else
FILEFLAGS 0x8L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", COMPANY_NAME
VALUE "FileDescription", APPLICATION_NAME
VALUE "LegalCopyright", "Copyright (C) "COMPANY_NAME
VALUE "ProductName", APPLICATION_NAME
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
在使用几个#include语句的好处是,你可以独自离开RC文件,然后简单地修改(甚至自动生成)的* .TXT包括像文件:
Ver_Num_Application.txt:
#define VER_NUM_APPLICATION 6
Ver_Num_Library.txt:
#define VER_NUM_LIBRARY 156
注意,现在你必须运行您的构建,以强制链接从生成它们之前删除* .RES文件(可能改变)的版本号。
使用条件定义,在dpr中使用{$ R ...}不同的version.res/rc对会不会更容易? IE'{$ ifdef DEBUG} {$ R version.res debugversion.rc} {$ ELSE} {$ R version.res version.rc} {$ ENDIF}'这不像其他信息会经常改变... –
真正。我想我想为我的所有项目提供一个'标准'RC文件,并且需要一个扩展名为* .txt的文件以记事本打开。 –
Aaww come'on Brian,我可以理解一个“标准”文件,但是一个txt文件?我确定你知道如何将.RC文件与记事本关联为默认编辑器? ;-) –
- 1. 使用maven构建时动态更改版本号码
- 2. 构建测试版本号
- 3. Windows mobile,更改版本号
- 4. 将Octopack nuget版本号更改为teamcity的内部版本号
- 5. 无法更改Android的版本号和版本号
- 6. 脚本编号jenkins构建版本
- 7. 如何从构建脚本更新Bamboo内部版本号?
- 8. 如何在构建后修改程序集的版本号?
- 9. 重大更改的版本号
- 10. 更改构建工具版本是否会使gradle更慢地构建项目?
- 11. Ant构建阅读版本号
- 12. 自动项目构建版本号
- 13. 使用Mercurial自动构建版本号
- 14. 版本更改时出错
- 15. 根据构建版本上的Android版本更改主题和样式
- 16. Maven构件的版本号
- 17. 的MSBuild更新与SVN构建版本
- 18. iOS App - 更改版本号方案
- 19. 更改SharePoint列表项版本号
- 20. 更改SQLite数据库版本号
- 21. TFS。更改编号。 “获取版本”
- 22. 如何更改构建定义的Scala版本?
- 23. 如何在Xcode中更改构建的SDK版本?
- 24. 在构建的二进制文件中更改版本信息
- 25. Git多个版本分支,构建自动增量版本号
- 26. 在构建步骤和构建配置中保留版本号
- 27. 如何更改Microsoft架构版本
- 28. 定位GAC程序集,如果只有构建版本或修订版本号发生更改
- 29. 当应用名称更改时,应用的版本号?
- 30. Android Studio构建版本的旧版本
这就是为什么您应该停止让IDE控制版本资源并将您自己的版本资源生成脚本编写为预生成操作 –
@david您是否有指示如何做到这一点? –
看看类似FinalBuilder的东西,它可以让你设置所有的EXE等到相同的内部编号,并确保一致的编译参数等。 – mj2008