Как я могу исправить сборки .NET?

Если я дважды скомпилирую проект C #, я получу две сборки. Эти сборки не совсем одинаковые (с использованием двоичной разницы). Я могу думать о причинах, почему это так, но факт остается фактом: исходный код для двух сборок идентичен.

Я занимаюсь созданием патча между этими сборками и применением патча на машине клиента.

Кто-нибудь знает библиотеку (желательно .NET) или инструмент, с помощью которого я могу создавать и применять исправления?

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

Обновление:

Я думаю, что немного больше информации поможет прояснить, к чему я клоню. У меня есть сервер непрерывной интеграции, создающий мое приложение. Я меняю версию файла и сборки, чтобы отразить номер сборки и версию, которую я создаю. Я мог бы поступить иначе, но этот вариант мне нравится.

Это приводит к изменению ссылок на сборки при создании приложения, но меня это устраивает. Сейчас я озабочен распространением обновления для ранее выпущенной версии. Я собираю обновления с помощью InstallShield. Доступные для InstallShield сборки сведены к небольшим патчам. Это не сильно увеличивает размер обновления.

В моем приложении есть несколько файлов данных, которые в основном представляют собой зашифрованные архивы, содержащие сборки. InstallShield не имеет доступа к этим сборкам и не понимает мой архив. Он не знает, как его расшифровать и извлечь. Я написал свою собственную процедуру исправления, которая находит измененные файлы в предыдущем архиве и заменяет их новой обновленной версией. В основном это стратегия поиска и замены.

Один архив содержит почти сотню (и продолжает расти) этих сборок, и некоторые из этих сборок содержат большие файлы данных в качестве ресурсов. Эти сборки зависят от сборок, которые являются частью приложения. Они также компилируются во время сборки с непрерывной интеграцией. Если их не компилировать во время сборки, останется место для проблем с зависимостями, и я не хочу пытаться с этим справиться. Каждый раз, когда я создаю патч, все эти сборки включаются. Сейчас я рассматриваю варианты уменьшения размера патча путем создания патчей для этих сборок.


person Christo    schedule 17.08.2009    source источник
comment
Отметка времени включена в скомпилированную сборку. вот почему он меняется каждый раз при компиляции.   -  person Cheeso    schedule 17.08.2009
comment
Кроме того, зачем вам исправлять сборки для небольших изменений и почему можно заменять их для более крупных изменений? Почему бы просто не использовать одну процедуру обновления: заменить сборку.   -  person Cheeso    schedule 17.08.2009
comment
Хм, если исходник тот же, зачем менять сборку на машине заказчика? Просто убедитесь, что номер версии остается прежним (нет * в атрибуте AssemblyVersion!), Тогда старую сборку также можно использовать ...   -  person MartinStettner    schedule 18.08.2009
comment
Cheeso: Да, замечено, но ничего, если бы погуглить, мне бы ничего не сказали.   -  person Christo    schedule 18.08.2009


Ответы (2)


Это не .net, но он должен иметь возможность сгенерировать для вас файл патча -

http://www.tibed.net/vpatch/

Раньше я использовал его для игр и карт и т. Д. но он должен работать с любыми двумя файлами.

person Wil    schedule 17.08.2009
comment
Я посмотрю, сделает ли он то, что мне нужно. Спасибо! - person Christo; 17.08.2009
comment
Посмотрел vpatch. Он работает даже лучше, чем я ожидал, и будет работать отлично. Еще раз спасибо! - person Christo; 18.08.2009

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

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

Создать новый устанавливаемый файл обычно намного проще и безопаснее, чем пытаться исправить машину на месте.

person Reed Copsey    schedule 17.08.2009
comment
Почему бы не пропатчить? Если ссылки изменились, это могло иметь небольшое влияние, но правильный патч преобразует сборку A в B и включает только необходимые биты для изменения ссылок на сборки в A. - person Christo; 18.08.2009
comment
Многие годы попыток исправления программного обеспечения в полевых условиях утомили меня любым решением для исправления. И моя компания, и поставщики, которых мы использовали, пошли по этому пути и в любом случае обнаружили, что это в лучшем случае проблематично. В большинстве случаев это работает, но когда возникает проблема, ее ужасно трудно исправить. Очень сложно сделать все, что можно сделать при правильной установке из патча, а пропускная способность для загрузки обновлений стоит недорого. Исправление просто не стоит усилий. - person Reed Copsey; 18.08.2009