我想知道如何设置现有二进制文件的版本号,而无需重建其源代码。
答案 0 :(得分:3)
首先,我想说我认为这样做可能是一个糟糕的想法......它可能被视为欺诈。
话虽如此,请参阅MSDN上的How to update assembly version of a dll without compiling in c#?帖子。根据Konrad的说法,您可以“直接编辑文件以更改版本信息”(尽管他建议不要这样做)。
刚试过这个,我可以确认在文本编辑器中打开了一个dll文件 ,并且可以编辑文件版本。文本版本信息位于文件末尾。
我只能假设文件中某处隐藏了二进制文件版本,因为在更改文本版本后,Windows属性窗口不再在“详细信息”选项卡上显示“产品版本”信息。我假设这是因为文本版本不再匹配隐藏的二进制版本(只是猜测)。奇怪的是,dll在编辑后仍然有效,但我仍然建议不要这样做。
答案 1 :(得分:2)
使用reshacker.exe可以完全替换dll中的versioninfo
资源。 (我使用它来设置matlab编译器工具箱发出的dll版本,这比试图弄清楚如何使mcc处理它更容易)。我只是为程序集尝试了相同的原则,它的工作原理同样好,并且版本信息正确地显示在资源管理器中,并且应用程序仍然可以正常工作。
你可以通过gui来实现,但这是我在构建脚本中使用它的方法。首先确保rc.exe
包含完整的VERSIONINFO资源的.res文件(请参阅here以获取此类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以查看是否有错误。