Добавить ссылку через код? - PullRequest
1 голос
/ 05 марта 2010

У меня есть мобильный проект на C # .NET Compact Framework 3.5 в Visual Studio 2008. Программа использует сканер штрих-кода и работает для двух различных типов устройств Windows Mobile (оба используют собственный SDK для управления сканером штрих-кода). Как я могу условно добавить ссылку на файл DLL SDK SDK сканера? то есть, если при компиляции для конфигурации HARDWARE1 я не хочу добавлять ссылку на HARDWARE2-SCANNER-SDK.DLL.

Ответы [ 2 ]

1 голос
/ 05 марта 2010

Вы можете указать, какие библиотеки DLL следует загружать в файл app.config, а затем использовать метод Assembly.Load , чтобы загрузить подходящую библиотеку (библиотеки.)

Это простой ответ. Но для того, чтобы действительно это сделать, вам может понадобиться создать несколько «упаковочных» сборок, которые имеют общий API (также в отдельной библиотеке), чтобы вашему конечному приложению не приходилось заботиться о том, откуда поступает информация о сканере. Он должен не знать, какое оборудование используется.

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

http://msdn.microsoft.com/en-us/magazine/cc163739.aspx http://en.wikipedia.org/wiki/Dependency_injection

0 голосов
/ 05 марта 2010

Зачем тебе это нужно? Если вы используете интерфейс для доступа к сканеру, то одна реализация будет ссылаться на один SDK, а другая реализация будет ссылаться на другой SDK.

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

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

...