Как правильно размещать пользовательские dll и пакеты nuGet на которые ссылается наша сборка, загружаемая в автокад?
Предположим, есть проект myProject.dll, находящийся локально на нескольких компах. Для успешной загрузки myProject.dll требует, что бы зависимые сборки и пакеты nuGet были в одной папке с ней. При этом этих сборок может быть достаточно много и копировать их на все компы не хочется. Как бы их разместить на удаленный сервер, а компы ссылались бы на этот сервак.
Полностью согласен с Александром Наумовичем: загружать DLL из сети либо совсем не получится, либо будут возникать проблемы.
Мне встречались жизнеспособные схемы, которые действовали по принципу ретрансляции. То есть, в сети располагается общая папка с dll надстроек, а на ПК у пользователей есть копия этой папки. А также, есть приложение, которое в определённый момент выполняет синхронизацию локальной и сетевой папки. Это можно делать в любой момент, пока dll ещё не загружены в AutoCAD, например, перед запуском AutoCAD.
Мне не совсем ясен этот механизм, на dll-ки, идущие в комплекте с framework-ком и автокадом свойству copy local можно присвоить false, а у всех остальных надо ставить true, ибо работать не будет.
Библиотеки, которые включены в Framework, загружаются автоматически. Они уже есть в системе, когда установлен .NET Framework. Поэтому их и не надо добавлять отдельными dll.
Библиотеки AutoCAD есть в установленном AutoCAD - все их можно найти в папке, в которую AutoCAD был установлен. Когда приложение запускается в среде AutoCAD, то эти библиотеки уже будут загружены самим AutoCAD. Потому и их тоже не надо прикладывать к приложению.
А остальные вспомогательные библиотеки - пользовательские, из Nuget-коллекции и т.п., они отсутствуют в .NET Framework и в AutoCAD, не загружаются ни .NET Runtime, ни AutoCAD'ом. Поэтому, их надо поставлять вместе с приложением.
Если эти библиотеки будут лежать рядом с основной dll приложения, то они будут загружены автоматически. Иногда, правда, это не срабатывает для сборок, которые имеют ссылки на WPF контролы.
Вспомогательные библиотеки также можно размещать в любом другом месте. Но тогда нужен механизм поиска и подгрузки этих вспомогательных dll, который будет запускаться до первого обращения к типам из этих dll. Владимир уже показал выше пару вариантов, как это можно сделать.
А, ну и самое главное, что я хотел сказать.
Как правильно размещать пользовательские dll и пакеты nuGet на которые ссылается наша сборка, загружаемая в автокад?
Нет какого-то одного "самого правильного" способа. Есть рекомендации как лучше не делать (например, не ссылаться на общие dll в сетевой папке). А в остальном - всё на усмотрение разработчика.