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

Я все время слышу о DLL-ад - что это?

Я все время слышу об адском DLL - о чем это все?

4b9b3361

Ответ 1

Это, когда приложение A устанавливает общую DLL v1.0, приходит приложение B и обновляет общую DLL до версии 1.1, которая должна быть совместимой, но есть несколько разные поведения, тогда приложение A перестает работать правильно и переустанавливает v1.0, затем Приложение B перестает работать... теперь представьте себе, что более чем с двумя приложениями можно сказать десяток: DLL Hell.

Ответ 2

Адреса DLL были в основном из COM-дней, где необходимо было зарегистрировать COM-dll, и клиенты этого будут искать их в реестре. Это был кошмар, потому что файловая система (*.dll, *.ocx) могла быть изменена, оставляя устаревшие записи в реестре. Приложения перестали работать, это было ужасно.

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

С .NET нет необходимости регистрировать DLL (GAC - это особый случай, и для обеспечения предотвращения проблемы с версией, описанной выше) загрузчик просто собирает сборки, просматривая правильные пути.

Ответ 3

В двух словах в старые добрые COM-дни каждый COM-компонент должен был быть зарегистрирован (запись была создана в реестре) до его использования. Тогда ваша программа создаст новый объект, указав имя типа (которое было ключом в реестре). И теперь у вас не было никакого контроля над тем, какая DLL действительно будет загружена, будет ли какое-либо другое программное обеспечение зарегистрировать новую/более старую/совершенно другую версию этой DLL и т.д.

Ответ 4

Простой - в предыдущих версиях окон было возможно, что несколько приложений все пытаются получить доступ к одной и той же общей библиотеке. Нет проблем, почему они разделены. проблема возникает, когда разные приложения пытаются получить доступ к различным версиям одной и той же сборки из центрального расположения. Предоставление всех более поздних версий dll совместимо с обратной связью, и что у вас есть последняя версия, проблем не должно быть, но если вы устанавливаете приложение, которое требует v2, а затем установите и приложение, которое требует (и включает) версию 1. x, вы можете обнаружить, что первые приложения перестали работать (потому что v2 dll была перезаписана с помощью v1.x).

Последние версии окон способны хранить несколько версий DLL и поставлять правильный по запросу.

Ответ 5

Это происходит, когда приложение устанавливает dll в систему, а другое приложение заменяет его другой версией dll, которая несовместима с более старой.

Это не проблема в С# (и .NET вообще), потому что сборки .NET достаточно умны, чтобы быть осведомленными в версии (и .NET имеет GAC, который управляет различными версиями).