#.net-core #plugins #licenses.licx
#.net-core #Плагины #licenses.licx
Вопрос:
У меня есть библиотека классов .NET Core, которая используется в качестве плагина в исполняемой программе. Плагин использует лицензионный компонент из стороннего SDK, и я использую licenses.licx
файл для встраивания информации о лицензировании в выходную dll. Я использую Visual Studio 2019 для компиляции как плагина, так и исполняемого файла.
Когда исполняемая программа загружает плагин и пытается его использовать, из стороннего SDK выдается исключение лицензирования. Кажется, что информация о лицензировании из licenses.licx
файла в проекте плагина не используется исполняемым файлом.
Я попытался ссылаться на проект плагина непосредственно из исполняемого проекта вместо динамической загрузки плагина, но возникает та же проблема.
Единственный способ заставить его работать — добавить licenses.licx
файл в исполняемый проект со ссылкой на SDK третьей части. Это предотвратило бы выдачу исключения лицензирования, и все работало, как ожидалось. Однако это не очень хорошее решение, потому что теперь на каждый лицензированный компонент, который используется плагином, должен напрямую ссылаться исполняемый проект.
Могу ли я каким-либо образом использовать лицензированный компонент в проекте плагина без добавления licenses.licx
файла в исполняемый проект?
Ответ №1:
По умолчанию .Инфраструктура сетевого лицензирования не была разработана с учетом сценария плагина и предполагает, что все лицензии встроены в исполняемый файл, поэтому для того, чтобы это стало возможным, это действительно зависит от того, как сторонний поставщик реализовал интеграцию с .Инфраструктура сетевого лицензирования, поэтому лучший способ действий — связаться с их службой поддержки, и они смогут ответить на ваш вопрос и, надеюсь, предоставить пример кода.
Тремя основными компонентами лицензирования .NET являются LicenseManager
, LicenseProvider
, и LicenseContext
.
Общая рекомендация Microsoft заключается в том, чтобы поставщики реализовывали свои собственные LicenseProvider
LicenseContext
и интегрировались с LicenseManager
для выполнения проверки, но некоторые поставщики просто используют настройки по умолчанию, поставляемые с .NET, и по умолчанию выполняется сканирование только исполняемой сборки на наличие встроенных лицензий.
В зависимости от того, реализовали ли / как они свои пользовательские LicenseProvider
настройки и / или LicenseContext
вы можете предоставить информацию о лицензировании / ключи из плагина, прежде чем будут созданы какие-либо элементы управления (проверка лицензии обычно выполняется в конструкторе элементов управления).
Если поставщик использует значение по умолчанию LicenseProvider
, LicenseContext
которое поставляется с .NET, то лучше всего попытаться использовать LicenseManager.CurrentContext.SetSavedLicenseKey(type, key);
его до создания экземпляров элементов управления, но вам нужно знать точные сборки и типы, а также как создать ожидаемый ключ.
Комментарии:
1. Это отличная информация, спасибо. Я связался с поставщиком, и они сказали, что сам исполняемый файл должен иметь информацию о лицензировании. На данный момент я просто собираюсь поместить информацию о лицензировании в исполняемый проект, поскольку, похоже, «поддерживаемого» способа сделать это нет.