На самом деле существует много дискуссий по этому поводу, с некоторыми различными мнениями:
Разница между LoadFile и LoadFrom для сборок .NET?
http://geekswithblogs.net/rupreet/archive/2010/02/16/137988.aspx
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/3bdaf65c-520c-4a1a-a825-fc2ca2957bf3
http://blogs.microsoft.co.il/blogs/sasha/archive/2007/03/06/Assembly-Load-Contexts-Subtleties.aspx
Чтобы ответить на ваш вопрос о том, зачем нужен метод LoadFrom (). Ну, похоже, все сводится к желанию загрузить из определенного места и зависимостей. Load () разрешает зависимости, но не позволяет вам выбрать местоположение сборки (т. Е. Существует заданная структура "исследования", в которой пытались найти сборку). LoadFile () гарантирует, что вы загрузите сборку, указанную в качестве строкового параметра, но не разрешает зависимости. LoadFrom () не гарантирует, что сборка, указанная вами в пути, будет загружена (т. Е. Если сборка с аналогичным идентификатором уже загружена), но она разрешает зависимости для вас.
Из MSDN
Используйте метод LoadFile для загрузки и
изучить сборки, которые имеют одинаковые
идентичности, но расположены в разных
пути. LoadFile не загружает файлы
в контекст LoadFrom, и делает
не разрешать зависимости с помощью
путь загрузки, как метод LoadFrom
делает. LoadFile полезен в этом
ограниченный сценарий, потому что LoadFrom
не может быть использован для загрузки сборок, которые
имеют одинаковые идентичности, но разные
пути; он загрузит только первый
такая сборка.
Из того, что я понял, кажется, что шаткое согласие формирует то, что следует держаться подальше от LoadFile (), использовать Load (), если можете, использовать LoadFrom (), если вам нужно. Но я видел, как люди говорили, что держись подальше от LoadFrom ().
В качестве точки данных в стандарте Ecma CLI (http://www.ecma -international.org / публикации / стандарты / Ecma-335.htm ) мы стандартизировали только метод Assembly.Load (string). где строка является именем сборки.