Подтвердить что ты не робот

Если я перестрою dll, который ссылается на мой проект, мне также нужно перестроить проект?

Я пишу эту программу (FOO) и включает ссылку на dll (BAR). Все BAR содержит методы, которые выполняют различные вычисления. FOO сможет быть установлен и развернут на нескольких компьютерах. Мой вопрос: если я изменю формулу в одном из методов (т.е. Измените x + y на x - y), мне нужно будет перестроить FOO против нового BAR? Что еще более важно, безопасно ли просто развертывать новую версию BAR?

4b9b3361

Ответ 1

Комментарий @vcsjones поднимает здесь важный момент.

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

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

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

Снова это вызовет ошибки во время выполнения, потому что сильное имя, которое ожидает ваша программа, не будет соответствовать сильному имени сборки. Поэтому в этом случае всегда требуется перекомпиляция.

Подводя итог:

  • Изменение кода, изменение версии и отсутствие сильных имен - ОК
  • Изменение версии и отсутствие сильных имен - может потребоваться перекомпилировать, рекомендуется
  • Изменение кода и сильное имя - требуется перекомпилировать
  • Изменение версии и сильное имя - требуется перекомпилировать

Ответ 2

Если вы измените формулу, содержащуюся в методе, нет необходимости перестраивать программу. Однако, если вы измените подпись метода, изменив вызывающие аргументы, необходимо будет перестроить программу.

Ответ 3

Вам просто нужно убедиться, что dll для проекта Bar находится в корзине для проекта Foo. Пока подписи методов не изменились, вы хорошо.

Ответ 4

Нет - вы можете при необходимости добавить новую DLL. Пока новая DLL не разрушает старые функции, нет необходимости перестраивать проект реферирования.

Ответ 5

Относительно случая, когда ссылочная сборка сильно пронумерована: Предположим, что A - любая сборка, B - сильно названная сборка, а A - ссылки B. Тогда (в отличие от претензий, сделанных выше?) можно изменить содержимое из B без повторной компиляции A. Я просто попробовал это, с тривиальным консольным приложением для A и библиотекой классов для B. Изменения в сильно названном B не вызвали ошибки времени выполнения в A. Однако есть специальный случай: если B делает переход от не-сильно названного к сильно названному, тогда A необходимо перекомпилировать, иначе будут ошибки времени выполнения.