ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

EPPlus 8 授权配置完全指南:双许可模型与四种 License 设置方式

EPPlus 8 授权配置完全指南:双许可模型与四种 License 设置方式 后端【免费下载链接】EPPlusEPPlus-Excel spreadsheets for .NET项目地址https://gitcode.com/gh_mirrors/epp/EPPlus点击查看免费下载EPPlus 8 是 .NET 生态中流行的 Excel 读写库项目位于gh_mirrors/epp/EPPlus源码主体在src/EPPlus。从 8.0 版本起EPPlus 采用双许可模型在使用任何ExcelPackage创建或读取工作簿之前必须先配置许可证否则访问Workbook属性时会抛出LicenseNotSetException。本文以 Readme.md 为主线结合仓库源码与测试用例系统讲解双许可模型的适用场景、四种许可证配置方式、配置的优先级顺序以及许可证校验的内部机制。一、双许可模型社区许可与商业许可EPPlus 8 采用双许可模型这是使用 EPPlus 8 的前提也是文档中首先强调的内容社区许可Polyform Noncommercial 1.0.0面向个人、非商业用途免费使用。许可文本可在 Polyform 官网 查看。商业许可任何商业企业或商业用途都需要购买商业许可证包含技术支持可通过 EPPlus 官网购买。在仓库中双许可模型的具体约束可以在 src/EPPlus/ExcelPackage.cs 的文件头注释和 src/EPPlus/readme.md 中看到源码文件明确声明 This software is licensed under PolyForm Noncommercial License 1.0.0。选择非商业许可时EPPlus 会在生成的工作簿中保留 Comment 和 Tag 字段用于许可证信息并在包内添加一个许可证文件用于标识文档的授权状态。这一行为由SetNonCommercialPersonal/SetNonCommercialOrganization触发详见下文源码分析。二、许可证必须先设置License 属性与校验时机在使用 EPPlus 8 之前必须通过ExcelPackage类的静态License属性指定要使用的许可证类型。该属性定义在 src/EPPlus/ExcelPackage.cspublic static EPPlusLicense License { get; } new EPPlusLicense();EPPlusLicense类的完整实现位于 src/EPPlus/EPPlusLicense.cs它持有以下关键状态属性类型说明LicenseKeystring商业许可证密钥仅在商业许可时设置LegalNamestring许可证持有人名称个人姓名或组织名称SourceEPPlusLicenseSource?许可证来源Code、ConfigFile、EnvironmentVariableLicenseTypeEPPlusLicenseType?许可证类型Commercial、NonCommercialPersonal、NonCommercialOrganizationLicenseInfoEPPlusLicenseInfo由许可证密钥解析出的授权信息未设置密钥时为nullExtendUnderRenewalbool订阅过期后是否启用 15 天续订宽限期许可证校验发生在ExcelPackage.Workbook首次被访问时src/EPPlus/ExcelPackage.csif (License.IsLicenseSet(_initErrors) false) { throw (new LicenseNotSetException(Please set the license using one of the methods on the static property ExcelPackage.License.)); }也就是说如果你在没有设置许可证的情况下直接执行new ExcelPackage()并访问package.WorkbookEPPlus 8 会抛出LicenseNotSetException。测试用例 src/EPPlusTest/LicenseTest.cs 中的CommercialConfigFileTest、CommercialConfigEnvironmentTest等方法均验证了先移除许可证、再通过不同来源恢复许可证的完整流程。IsLicenseSet内部逻辑src/EPPlus/EPPlusLicense.cs说明若之前已通过代码设置过许可证_licenseSet true则直接返回否则尝试从配置来源加载SetLicenseFromConfig加载失败才会要求用户显式设置。三、方式一通过代码设置Code这是最直接、最常用的方式。在创建任何ExcelPackage之前先调用静态ExcelPackage.License上的方法// 商业用户购买商业许可后用许可证密钥设置 ExcelPackage.License.SetCommercial(Your License Key here); // 非商业个人用途符合 Polyform Noncommercial 许可 ExcelPackage.License.SetNonCommercialPersonal(Your Name); // 或非商业组织用途 ExcelPackage.License.SetNonCommercialOrganization(Your Noncommercial Organization); using (var package new ExcelPackage(new FileInfo(MyWorkbook.xlsx))) { // ... 使用 workbook / worksheets 读写 Excel }三种方法对应的源码实现src/EPPlus/EPPlusLicense.cs行为如下SetNonCommercialPersonal(string fullName)将LegalName设为你的姓名LicenseType设为NonCommercialPersonalSource设为Code。SetNonCommercialOrganization(string organizationName)行为类似LicenseType为NonCommercialOrganization。SetCommercial(string licenseKey)调用LicenseHandler.ValidateLicenseKey校验密钥成功后填充LicenseInfo含有效期、授权开发者数量等失败则抛出InvalidLicenseKeyException或LicenseNotValidException。许可证持有人名称的校验规则两个非商业方法都会先调用ValidateNamesrc/EPPlus/EPPlusLicense.cs不满足以下条件会抛出LicenseInformationException名称长度至少 3 个字符名称不能包含/、\、*、Tab 或控制字符名称中字母字符数量至少 2 个。四、方式二通过 appsettings.json 配置.NET Core / .NET 5在appsettings.json中加入EPPlus:ExcelPackage:License节点值为形如类型:参数的字符串{ EPPlus: { ExcelPackage: { License: Commercial:Your License Key here } } }非商业用途个人或组织{ EPPlus: { ExcelPackage: { License: NonCommercialPersonal:Your Name // 或使用 NonCommercialOrganization:Your organizations name } } }从源码看.NET Core 分支#if(Core)通过Microsoft.Extensions.Configuration读取 JSON 配置GetConfigValue最终调用ExcelConfigurationReader.GetJsonConfigValue(EPPlus:ExcelPackage:License, ...)src/EPPlus/EPPlusLicense.cs。ExcelPackage.Configure会把IConfiguration注入到EPPlusLicensesrc/EPPlus/ExcelPackage.cs。五、方式三通过 app.config / web.config 配置.NET Framework在传统 .NET Framework 项目中将配置写入appSettings节键名为EPPlus:ExcelPackage.LicenseappSettings !--商业用途-- add keyEPPlus:ExcelPackage.License valueCommercial:Your License Key here / /appSettings非商业用途appSettings add keyEPPlus:ExcelPackage.License valueNonCommercialPersonal:Your Name / !-- 或使用 valueNonCommercialOrganization:Your organizations name -- /appSettings源码中的非 Core 分支#elsesrc/EPPlus/EPPlusLicense.cs会依次尝试GetValueFromAppSettings(EPPlus:ExcelPackage:License)和GetValueFromAppSettings(EPPlus:ExcelPackage.License)两种键名格式兼容不同习惯的写法。六、方式四通过环境变量 EPPlusLicense 配置这是文档中提到的最简单的方式——无需改动代码和配置文件只需设置名为EPPlusLicense的环境变量值为类型:参数格式EPPlusLicense Commercial:Your License Key EPPlusLicense NonCommercialPersonal:Your Name EPPlusLicense NonCommercialOrganization:Your organizations nameWindows 控制台用户级设置示例 SETX EPPlusLicense Commercial:Your License Key从源码看环境变量读取遵循明确的优先级src/EPPlus/EPPlusLicense.cs先读EPPlusLicense依次尝试EnvironmentVariableTarget.Process→User→Machine三个目标命中即返回并将Source标记为EnvironmentVariable若均未命中再回退到配置文件JSON 或 appSettings此时Source标记为ConfigFile。测试用例 src/EPPlusTest/LicenseTest.cs 的CommercialConfigEnvironmentTest验证了通过Environment.SetEnvironmentVariable(EPPlusLicense, NonCommercialPersonal:Jan Källman, EnvironmentVariableTarget.Process)设置后LicenseType、Source和LegalName均被正确解析。七、配置字符串的解析细节与优先级总结SetLicenseFromConfigsrc/EPPlus/EPPlusLicense.cs负责解析配置字符串关键行为使用:或,作为分隔符拆分前缀与参数因此Commercial:Key、NonCommercialPersonal:Name、NonCommercialOrganization:Name三种格式均受支持前缀匹配不区分大小写OrdinalIgnoreCase若仅写了noncommercialorganization:或noncommercialpersonal:而未提供名称会抛出LicenseInformationException并提示正确的格式解析成功后会根据来源设置EPPlusLicenseSource.EnvironmentVariable或EPPlusLicenseSource.ConfigFile。完整优先级链路高 → 低代码显式调用ExcelPackage.License.SetXxx(...)优先级最高_licenseSet一旦为true即直接生效环境变量EPPlusLicense先 Process再 User最后 Machine配置文件.NET Core 读appsettings.json的EPPlus:ExcelPackage:License.NET Framework 读app.config/web.config的appSettings。EPPlusLicenseSource枚举定义于 src/EPPlus/EPPlusLicenseSource.cs包含Code、EnvironmentVariable、ConfigFile三个取值可用ExcelPackage.License.Source检查当前许可证究竟来自哪种配置渠道。八、许可证校验与授权信息从密钥到 EPPlusLicenseInfoSetCommercial是唯一需要密钥的方法它把校验交给LicenseHandler.ValidateLicenseKey。校验成功后ExcelPackage.License.LicenseInfo会被填充为EPPlusLicenseInfosrc/EPPlus/EPPlusLicenseInfo.cs包含属性说明LicenseNumber许可证编号LicenseType商业许可证类型EPPlusCommercialLicenseTypeLicenseValidFrom/LicenseValidTo许可证有效期起止日期NumberOfLicensedDevelopers该许可证覆盖的开发者数量Status许可证状态Status对应的EPPlusLicenseStatus枚举src/EPPlus/EPPlusLicenseStatus.cs包括Valid密钥对当前版本有效InvalidLicenseKey密钥无效Expired订阅许可证已过期NotValidForThisVersion永久许可证仍有效但需要续订才能用于当前版本。有效期语义上还有两点值得注意见 src/EPPlus/EPPlusLicenseInfo.cs 的注释订阅许可证的LicenseValidTo会在订阅到期后额外宽限 30 天以便续订永久许可证则无法升级到该日期之后发布的大/小版本。仓库测试 src/EPPlusTest/LicenseTest.cs 提供了各类场景的实证CommercialFunctionTest有效密钥被接受可解析出LicenseValidFrom、LicenseValidTo与NumberOfLicensedDevelopersCommercialFunctionInvalidKeyTest无效密钥抛出InvalidLicenseKeyExceptionCommercialSubscriptionExpired/CommercialTemporaryKey过期密钥与临时密钥抛出LicenseNotValidExceptionCommercialTrialExpiredShouldReadFromConfig过期试用订阅从配置读取时Source被正确标记为ConfigFileNonCommercialOrganizationFunctionTest/NonCommercialPersonalFunctionTest非商业许可可以正常生成并保存工作簿。关于 ExtendUnderRenewal续订宽限期EPPlusLicense.ExtendUnderRenewalsrc/EPPlus/EPPlusLicense.cs用于订阅过期但尚在续订期的情况设置为true后SetCommercial校验时允许在过期后获得额外的 15 天用于续订。但源码同时做了保护若当前日期距离LicenseValidTo还有 20 天以上就开启该标志会抛出LicenseNotValidException提示该标志只应在续订期间使用。移除许可证如需在运行时重置授权状态例如切换测试环境可调用ExcelPackage.License.RemoveActiveLicense()src/EPPlus/EPPlusLicense.cs它会清空LicenseType、LicenseKey、Source、LegalName、LicenseInfo并将_licenseSet重置为false此后再次访问工作簿时会重新走配置加载流程。九、从 EPPlus 7 迁移LicenseContext 已废弃EPPlus 8 中旧版ExcelPackage.LicenseContext静态属性已被标记为[Obsolete]src/EPPlus/ExcelPackage.cs任何赋值都会抛出LicenseContextPropertyObsoleteException提示使用新的静态ExcelPackage.License属性。升级到 EPPlus 8 时需要将原有的LicenseContext相关代码统一替换为本文介绍的四种新配置方式之一。十、常见问题速查问题排查思路访问Workbook时抛出LicenseNotSetException检查是否调用了SetCommercial/SetNonCommercialPersonal/SetNonCommercialOrganization或配置了环境变量 / 配置文件InvalidLicenseKeyException密钥格式或内容无效核对官网 My Licenses 中获取的密钥是否完整LicenseNotValidException订阅已过期、临时密钥到期或误用ExtendUnderRenewal非商业名称被拒绝名称需满足长度 ≥ 3、至少 2 个字母、不含/\*及控制字符配置文件不生效确认键名格式.NET Core 用EPPlus:ExcelPackage:License.NET Framework 用EPPlus:ExcelPackage.License或冒号分隔的add key总结EPPlus 8 的许可证体系是使用该库的第一步也是从 7.x 升级时最容易踩坑的地方。核心要点可归纳为商业用途必须配置商业密钥非商业用途须声明个人或组织身份四种配置方式代码、appsettings.json、app/web.config、环境变量可任选其一环境变量优先于配置文件代码显式设置优先级最高所有方式统一使用类型:参数的字符串格式。相关实现均可在 src/EPPlus/EPPlusLicense.cs、src/EPPlus/EPPlusLicenseInfo.cs 及配套测试 src/EPPlusTest/LicenseTest.cs 中进一步核对。赞分享后端【免费下载链接】EPPlusEPPlus-Excel spreadsheets for .NET项目地址https://gitcode.com/gh_mirrors/epp/EPPlus点击查看免费下载相关推荐Handsontable 软件许可Software License完全指南双许可模式、License Key 配置与验证机制Handsontable 软件许可Software License完全指南双许可模式、License Key 配置与验证机制 Handsontable 采前端UI组件Handsontable 许可证密钥License Key完整指南配置、校验机制与授权状态解析Handsontable 许可证密钥License Key完整指南配置、校验机制与授权状态解析 Handsontable 根据你的使用场景提供商业版与免费前端UI组件GitHub Training Kit开源许可证完全解析双重授权模式实战指南GitHub Training Kit开源许可证完全解析双重授权模式实战指南 GitHub Training Kit是一个专注于Git和GitHub开源课程的文档教程上一篇三步解锁Wand游戏修改器全部潜能Wand-Enhancer增强工具安装与玩法全攻略下一篇Wand 修改器高级功能解锁一条龙Wand-Enhancer 开源免费从构建到手机远程控制全攻略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表