Ко всем добрым советам выше, согласился. При этом, может быть, существует допустимый сценарий, когда внешние DLL обычно не нужны? Итак, вот что вы делаете. Вы оборачиваете и изолируете их. (Это более высокий уровень абстракции, чем создание интерфейсов, поэтому его немного проще поддерживать).
В Visual Studio, если вы не перекомпилируете конкретные проекты VS, которые ссылаются на внешние DLL, вы можете скомпилировать остальные проекты VS Solution, не имея под рукой этих DLL. Таким образом, если вы каким-то образом обернете внешние DLL своими собственными DLL, а затем распространите эти обертки только в двоичном виде, человеку, разделяющему ваш исходный код, не понадобятся внешние DLL для компиляции основного решения.
Вопросы :
1. Дополнительная работа по разделению кода оболочки на изолированные проекты.
2. Другие проекты VS должны добавить ссылки на библиотеки DLL-оболочки как ссылки «Файловая система» на папку «LIB», а не «Ссылки проекта».
3. Конфигурации VS Solution должны отключить компиляцию для библиотек DLL оболочки. Новая конфигурация должна быть добавлена, чтобы явно перекомпилировать их, если это необходимо.
4. Определение VS Project для каждой библиотеки Wrapper DLL должно включать событие после сборки, чтобы скопировать их в ожидаемое местоположение папки «LIB».
5. Во время выполнения внешние DLL-файлы должны присутствовать в каталоге bin приложения, или в GAC компьютера, либо загружаться явным образом. ПРИМЕЧАНИЕ. Если они отсутствуют, то только в случае их фактического вызова во время выполнения их отсутствие приведет к ошибке времени выполнения. то есть вам не нужно иметь их, если в общем случае код не вызывает их.
6. Во время выполнения вы можете обнаружить ошибки при загрузке внешних DLL-файлов и представить пользователю красивое сообщение об ошибке, в котором будет сказано: «Чтобы воспользоваться этой функцией, установите следующий продукт: xyz». Что лучше, чем отображение «AssemblyLoadException ... пожалуйста, используйте FusionLogViewer ... и т. Д.»
7. При запуске приложения вы можете проверить и обнаружить отсутствующие библиотеки DLL, а затем отключить определенные функции, которые зависят от них.
Например: в соответствии с этим шаблоном у меня может быть приложение, которое интегрируется с Microsoft CRM и SAP, но только для определенной функции, т.е. импорта / экспорта.
Во время разработки, если разработчику никогда не понадобится менять оболочку, он сможет перекомпилировать без этих внешних DLL.
Во время выполнения, если пользователь никогда не вызывает эту функцию, приложение никогда не вызовет оболочку, и поэтому внешние DLL не нужны.