Standard.Licensing

其他类别 2025-08-04

Standard.Licensing

.NET和.NET框架产品的易于使用的许可库。


安装

从Nuget获取Standard.Licensing 。

dotnet add package Standard.Licensing 

用法

为您的产品创建私人和公钥

Standard.Licensing使用椭圆曲线数字签名算法(ECDSA)来确保在创建后不能更改许可证。

首先,您需要为您的产品创建一个新的公共/私钥对:

Standard.Licensing.Security.Cryptography.KeyGenerator.Create(); var keyPair = keyGenerator.GenerateKeyPair(); var privateKey = keyPair.ToEncryptedPrivateKeyString(passPhrase); var publicKey = keyPair.ToPublicKeyString();">
 var keyGenerator = Standard . Licensing . Security . Cryptography . KeyGenerator . Create ( ) ; 
var keyPair = keyGenerator . GenerateKeyPair ( ) ; 
var privateKey = keyPair . ToEncryptedPrivateKeyString ( passPhrase ) ;  
var publicKey = keyPair . ToPublicKeyString ( ) ;

将私有密钥存放并用您的产品分发公共密钥。通常,您为每种产品创建一个密钥对,否则可以使用同一键对使用所有产品的许可证。如果您希望客户在每个主要版本上购买新的许可证,则可以为每个发行版和产品创建一个密钥对。

创建许可证生成器

现在,我们需要一些东西来生成许可证。这可以通过许可证轻松完成:

 var license = License . New ( )  
    . WithUniqueIdentifier ( Guid . NewGuid ( ) )  
    . As ( LicenseType . Trial )  
    . ExpiresAt ( DateTime . Now . AddDays ( 30 ) )  
    . WithMaximumUtilization ( 5 )  
    . WithProductFeatures ( new Dictionary < string , string >  
        {  
            { "Sales Module" , "yes" } ,  
            { "Purchase Module" , "yes" } ,  
            { "Maximum Transactions" , "10000" }  
        } )  
    . LicensedTo ( "John Doe" , "john.doe@example.com" )  
    . CreateAndSignWithPrivateKey ( privateKey , passPhrase ) ;

现在,您可以获取许可证并将其保存到文件中:

 File . WriteAllText ( "License.lic" , license . ToString ( ) , Encoding . UTF8 ) ;

或者

 license . Save ( xmlWriter ) ;

验证您的申请中的许可证

主张许可证的最简单方法是在您的申请的入口处。

首先从文件或资源加载许可证:

 var license = License . Load ( .. . ) ;

然后,您可以主张许可证:

Standard.Licensing.Validation; var validationFailures = license.Validate() .ExpirationDate(systemDateTime: DateTime.Now) .When(lic => lic.Type == LicenseType.Trial) .And() .Signature(publicKey) .AssertValidLicense();">
 using Standard . Licensing . Validation ;

var validationFailures = license . Validate ( )  
                                . ExpirationDate ( systemDateTime : DateTime . Now )  
                                . When ( lic => lic . Type == LicenseType . Trial )  
                                . And ( )  
                                . Signature ( publicKey )  
                                . AssertValidLicense ( ) ;

Standard.Licensing不会引发任何例外,只需返回验证失败的列举即可。

现在,您可以迭代可能的验证失败:

 foreach ( var failure in validationFailures )
     Console . WriteLine ( failure . GetType ( ) . Name + ": " + failure . Message + " - " + failure . HowToResolve ) ;

或简单地检查是否有任何故障:

 if ( validationFailures . Any ( ) )
   // ...

在多次使用结果之前,请确保调用验证failures.tolist()或验证failures.toArray()。

第三方项目

  • Patrickrainer/LicenSemanager- WPF许可证经理供开发人员生成和验证许可证。
  • SKST/LICENSEMANAGER -GUI Standard.Licensing 。请求项目。

学分

这是项目来自Portable.nicrable库。该叉的目的是增加对更多.NET平台的支持,尤其是.NET标准和.NET Core。

  • DNAUCK/PORTABLE。请求原始作品。

执照

该项目已根据MIT许可获得许可。


由junian.dev制造。

下载源码

通过命令行克隆项目:

git clone https://github.com/junian/Standard.Licensing.git