2013-08-14 4 views
2

Я хочу знать, как установить номер версии существующего двоичного файла без необходимости пересоздавать его исходный код.Как обновить номер версии файла C# DLL без повторной компиляции?

+0

Эти управляемые (.NET) dlls? Если они управляются - они подписаны? – RQDQ

+3

Почему вы хотите изменить версию no существующего двоичного кода? Если вы хотите обновить двоичный файл, просто замените его на новую версию. – Nolonar

+8

В каком-то смысле я надеюсь, что это невозможно. –

ответ

3

Во-первых, я хотел бы сказать, что считаю, что это может быть ужасной идеей ... это может быть истолковано как мошенничество.

Сказав это, пожалуйста, обратитесь к сообщению How to update assembly version of a dll without compiling in c#? на MSDN. Согласно Конраду, вы можете «просто отредактировать файл напрямую, чтобы изменить информацию о версии» (хотя он советует против этого).

Только что попробовал это, я могу подтвердить, что DLL файл может быть открыт в текстовом редакторе, и что версия файла может быть отредактированы. Информация о текстовой версии находится в конце файла.

Я могу только предположить, что есть также двоичные версии файлов, скрытые где-то в файле, потому что после изменения текстовых версий окно свойств Windows больше не отображает информацию о версии продукта на вкладке «Сведения». Я предполагаю, что это потому, что текстовая версия больше не соответствует скрытой двоичной версии (просто догадка). Как ни странно, dll все еще работало после редактирования, но я бы по-прежнему не советовал делать это.

+0

Просто интересно (и IANAL), но почему это было бы незаконным/мошенничеством? –

+3

@pwny, потенциально потому, что конкретная версия файла/dll может иметь лицензионные/договорные обязательства и ограничения, связанные с ним. Изменяя номер версии файла, вы потенциально можете создать непересекающийся между контрактом и двоичным кодом (контракт применяется к DLL V1, но DLL сообщается как V2, который имеет разные обязательства).Я не легализую, но это мой прием. –

+0

относительно вашего первого абзаца: посмотрите, почему я использую его в своем ответе. Ничего плохого в этом нет, не говоря уже об ужасной идее. Однако, конечно, мы не знаем, что OP планирует с ним сделать: P – stijn

2

Использование reshacker.exe возможно полностью заменить ресурс versioninfo в dlls. (Я использую это, например, для установки версии DLL, выпущенной набором инструментов компилятора Matlab, что намного проще, чем пытаться выяснить, как сделать с ней сделку mcc). Я просто попробовал тот же принцип для сборок, и он работает так же хорошо, и информация о версии должным образом отображается в проводнике, и приложение все еще работает.

Вы можете сделать это только через gui, но вот как я использую его из скриптов сборки. Сначала убедитесь, что у вас есть файл .res, испущенный rc.exe, содержащий полный ресурс VERSIONINFO (см. 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 

и он заменит информацию о версии в пути/к/длл с информацией от пути/к/длл/version.res. Проверьте res.log, чтобы убедиться, что что-то не так.

Смежные вопросы