Как использовать licenses.licx в плагине .NET Core

#.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. Это отличная информация, спасибо. Я связался с поставщиком, и они сказали, что сам исполняемый файл должен иметь информацию о лицензировании. На данный момент я просто собираюсь поместить информацию о лицензировании в исполняемый проект, поскольку, похоже, «поддерживаемого» способа сделать это нет.