如何在 .NET Core 插件中使用 licenses.licx

How to use licenses.licx in a .NET Core plugin

我有一个 .NET Core class 库,它被用作可执行程序中的插件。该插件使用来自第三方 SDK 的许可组件,我使用 licenses.licx 文件将许可信息嵌入到输出 dll 中。我正在使用 Visual Studio 2019 编译插件和可执行文件。

当可执行程序加载插件并尝试使用它时,第三方 SDK 抛出许可异常。可执行文件似乎没有使用插件项目中 licenses.licx 文件的许可信息。

我尝试直接从可执行项目引用插件项目而不是动态加载插件,但出现了同样的问题。

我让它工作的唯一方法是将 licenses.licx 文件添加到可执行项目并引用第三方 SDK。这样做可以防止抛出许可异常,并且一切都按预期进行。然而,这不是一个好的解决方案,因为现在插件使用的每个许可组件都必须由可执行项目直接引用。

有什么方法可以在插件项目中使用许可组件而不将 licenses.licx 文件添加到可执行项目?

默认的 .NET 许可基础结构在设计时并未考虑插件场景,并假定许可证全部嵌入到可执行文件中,因此这是否可能实际上取决于第三方供应商如何实施集成使用 .NET 许可基础结构,因此最好的做法是联系他们的支持团队,他们应该能够回答您的问题并希望提供代码示例。

.NET 许可的三个主要组成部分是 LicenseManager, LicenseProvider, and LicenseContext

Microsoft 的一般建议是让供应商实现自己的 LicenseProviderLicenseContext 并与 LicenseManager 集成以执行验证,但有些供应商只是使用随附的默认值使用 .NET - 并且 默认情况下仅扫描可执行程序集以查找嵌入式许可证

根据 if/how 他们已经实现了他们的自定义 LicenseProvider and/or LicenseContext 您也许可以从插件中提供许可 info/keys , 在实例化任何控件之前(许可证检查通常在控件的构造函数中完成)。

如果供应商使用 .NET 附带的默认 LicenseProviderLicenseContext,那么最好的办法是在实例化控件之前尝试使用 LicenseManager.CurrentContext.SetSavedLicenseKey(type, key);,但是您'将需要知道确切的程序集和类型,以及如何构造它期望的密钥。