如何在不重新编译的情况下更新C#DLL的文件版本号?

时间:2013-08-14 12:04:22

标签: c# wpf dll

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

2 个答案:

答案 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以查看是否有错误。