2016-03-24 1 views
0

Мне нужно создать некоторую функциональность в нашем большом пакете C#, который будет использовать .NET DLL из стороннего программного пакета. Не все наши клиенты будут использовать этот пакет. Если я добавлю ссылку на эти DLL в Visual Studio, я могу получить доступ к объектам, которые мне нужны, но я предполагаю, что это нарушит сборку для других разработчиков в моей компании, у которых не будет установлен этот пакет сторонних разработчиков.Как включить DLL, которая не всегда будет присутствовать?

Каков правильный подход для меня, чтобы иметь возможность доступа к этой функции сторонних разработчиков, не нарушая при этом задач для клиентов и разработчиков, которые не будут использовать этот пакет? Нужно ли мне это решать, создав собственную DLL как слой косвенности? Нужно ли мне динамически загружать сторонние библиотеки DLL во время выполнения?

+1

Какую технологию вы используете? Является ли приложение .NET-приложением и DLL под вопросом .NET DLL или родной Windows DLL? – Codor

+1

Ours is .NET, и я считаю, что DLL, о которой идет речь, также является .NET. Я могу добавить его в качестве ссылки в тривиальное приложение и сделать для него вызовы с C#. – skiphoppy

+1

Вы уже знаете ответ, очень сложно угадать, что еще вам нужно. Многие и многие хиты google уже находятся в запросе «C# plugin framework», вам не нужен еще один. –

ответ

1

Насколько я понимаю, .NET DLL не загружается приложением, пока оно не понадобится. Это означает, что если DLL ссылается, но никакая ветвь кода, использующая ее, не достигается, она не требуется присутствовать. Возможно, в этом случае нет необходимости реализовывать что-то.

Это, как говорится, можно использовать метод, называемый «горячей загрузкой», что означает использование рефлекса для явно доступа к типам, содержащимся в .NET DLL. Этот метод обсуждается в this question.

+1

Нужна ли DLL для других разработчиков, чтобы иметь возможность создавать наше приложение? – skiphoppy

+0

@skiphoppy думаю так, если только он не горячо загружен. – Codor

1

Сначала проверьте, была ли она уже загружена; если нет, проверьте, существует ли .DLL, и если да, то динамически загружайте его с помощью System.Reflection.Assembly.LoadFile. Причина, по которой вы хотите проверить, была ли она уже загружена, заключается в том, что динамический загрузчик часто теряет память, загружая дополнительные экземпляры.

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

Будьте внимательны при обращении к сборке, когда ее нет; хотя .NET обычно динамически загружается только тогда, когда требуется сборка, более новые версии становятся более агрессивными в том, как они загружаются, чтобы предотвратить задержки при запуске, поэтому, даже если она работает сейчас (и это зависит от общей конфигурации), она может не работать в ближайшем будущем.

0

Похоже, что я буду использовать динамическую нагрузку, как описано enter link description here. Поддержки к Альберто, чтобы показать, как использовать динамическое ключевое слово с его ответом.

Смежные вопросы