Почему я должен использовать Assembly.LoadFile вместо Assembly.LoadFrom? - PullRequest
2 голосов
/ 27 декабря 2010

У меня сложилось впечатление, что Assembly.LoadFrom использует ApplicationBase и PrivateBinPath.Это также мое впечатление, что Assembly.LoadFile нет.

Зачем кому-то использовать LoadFile?Другими словами, если мое понимание верно, почему кто-то хочет НЕ использовать ApplicationBase и PrivateBinPath?

Я работаю с некоторым существующим кодом, который использует LoadFile, и я не понимаю, почему это так.LoadFile, очевидно, не загружает зависимости из того же каталога.Метод LoadFrom загружает зависимости (из документа doc: контекст загрузки ... позволяет находить и загружать зависимости по этому пути, поскольку информация о пути поддерживается контекстом. )чтобы преобразовать его с помощью LoadFile, чтобы использовать LoadFrom.

Что может сломаться, если что-нибудь произойдет, если я заменю LoadFile на LoadFrom?

Даже если это будет доброкачественным, может случиться так, что я не смогу выполнить замену, основываясь только на расписаниях проектов.Если я не могу заменить LoadFile на LoadFrom, есть ли способ убедить сборки, загруженные в LoadFile, загрузить зависимости?Есть ли способ упаковки, который я могу использовать (встроенная сборка, ILMerge, событие AssemblyResolve и т. Д.), Который позволяет сборке, загруженной с помощью LoadFile, также загружать свои зависимости?

Ответы [ 2 ]

4 голосов
/ 27 декабря 2010

Будьте осторожны - это не одно и то же.

LoadFrom () проходит через Fusion и может быть перенаправлен на другую сборку по другому пути, но с той же идентификацией, если она уже загруженав контексте LoadFrom.LoadFile () вообще не связывается через Fusion - загрузчик просто идет вперед и загружает ровно * то, что запросил вызывающий.Он не использует ни контекст Load, ни LoadFrom.

http://blogs.msdn.com/b/suzcook/archive/2003/09/19/loadfile-vs-loadfrom.aspx

0 голосов
/ 27 декабря 2010

В дополнение к ответу Мадхура Ахаджи, обратите внимание, что в большинстве случаев вам действительно нужно использовать Assembly.Load.

http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57143.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...