3

我想知道如何设置现有二进制文件的版本号,而无需重建其源代码。

4

2 回答 2

3

首先,我想说的是,我认为这样做可能是一个糟糕的主意……它可能被解释为欺诈。

话虽如此,请参阅如何在不使用 c# 编译的情况下更新 dll 的程序集版本?在 MSDN 上发布。根据 Konrad 的说法,您可以“直接编辑文件以更改版本信息”(尽管他不建议这样做)。

刚刚尝试过,我可以确认可以在文本编辑器中打开 dll 文件并且可以编辑文件版本。文本版本信息位于文件末尾。

我只能假设文件中的某处也隐藏了二进制文件版本,因为更改文本版本后,Windows 属性窗口不再在详细信息选项卡上显示产品版本信息。我假设这是因为文本版本不再匹配隐藏的二进制版本(只是猜测)。奇怪的是,该 dll 在编辑后仍然有效,但我仍然建议不要这样做。

于 2013-08-14T13:15:36.083 回答
2

使用reshacker.exe可以完全替换versioninfodll 中的资源。(我用这个例如设置matlab编译器工具箱发出的dll版本,这比试图弄清楚如何让mcc处理它要容易得多)。我刚刚对程序集尝试了相同的原理,它的效果同样好,版本信息正确显示在资源管理器中,应用程序仍然可以正常工作。

您可以仅通过 gui 来完成,但这是我从构建脚本中使用它的方式。首先确保您有一个rc.exe包含完整 VERSIONINFO 资源的 .res 文件(有关此类 rc 文件外观的示例,请参见此处)。然后创建一个包含以下内容的ini文件:

[FILENAMES]
Exe=path/to/dll
SaveAs=path/to/dll
log=res.log
[COMMANDS]
-delete versioninfo, 1,
-addoverwrite path/to/dll/version.res, versioninfo, 1,

并运行

reshacker -script patho/to/script

它将用 path/to/dll/version.res 中的信息替换 path/to/dll 中的版本信息。检查 res.log 以查看是否有问题。

于 2013-08-14T13:21:27.853 回答