Skip to Content
Nouvelle version 12 disponible 🎉

Tâche MSBuild lic Server

La tâche Lic exécute la ligne de commande lic depuis un projet MSBuild : un build peut ainsi générer et signer des licences avec les mêmes propriétés que la ligne de commande.

La tâche Lic se trouve dans Babel.Build.dll, l’assembly qui fournit aussi la tâche Babel de l’obfuscateur. Elle construit une ligne de commande lic à partir de ses propriétés et de ses éléments, puis exécute lic.exe, si bien que tout ce que décrit la Référence est disponible depuis un fichier de projet. Elle sert dans deux cas :

  • Vos propres projets MSBuild, par exemple pour émettre une licence de test pour l’application testée, ou pour générer les licences des clients depuis un serveur de build.
  • Les fichiers de projet .lcproj, que lic --makeproject écrit à partir d’une ligne de commande et que lic --project exécute de nouveau ; voir Fichiers de projet.

Inscrire la tâche

Référencez l’assembly de la tâche avec un élément UsingTask qui pointe vers Babel.Build.dll. Dans les archives zip de Babel, il se trouve dans le dossier MSBuild ; ainsi, lorsque BabelDir désigne le dossier où babel_net472_<version>.zip a été extrait :

<UsingTask TaskName="Lic" AssemblyFile="$(BabelDir)\MSBuild\Babel.Build.dll" />

La tâche exécute lic.exe depuis le dossier indiqué par LicDirectory. Sans cette propriété, la tâche cherche à côté de Babel.Build.dll, puis dans le dossier désigné par la variable d’environnement BABEL_INSTALL_DIRECTORY. Comme lic.exe se trouve à la racine de l’archive zip extraite, et non dans son dossier MSBuild, réglez LicDirectory sur cette racine, comme le fait l’exemple ci-dessous.

Lorsque LicDirectory est défini, la tâche exécute lic.exe, qui nécessite Windows. Les archives zip babel_net80, babel_net90 et babel_net100 contiennent elles aussi MSBuild/Babel.Build.dll et lic.dll : lorsque MSBuild s’exécute sous l’hôte dotnet et que la tâche trouve lic.dll sans LicDirectory, elle l’exécute par l’intermédiaire de dotnet. Là où seul l’Outil Babel Licensing est disponible, exécutez plutôt lic depuis une tâche Exec ; les options sont les mêmes.

Un exemple complet

Le projet ci-dessous génère, après le build, une licence signée pour l’assembly généré. Le titulaire, le produit, les fonctionnalités, les champs et les restrictions sont des éléments MSBuild dont les métadonnées deviennent les paires key=value des options correspondantes :

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <UsingTask TaskName="Lic" AssemblyFile="$(BabelDir)\MSBuild\Babel.Build.dll" /> <PropertyGroup> <BabelDir>C:\Tools\babel_net472</BabelDir> <LicenseKeyFile>$(MSBuildProjectDirectory)\keys\signing.pem</LicenseKeyFile> <LicenseOutputFile>$(OutDir)MyApp.licenses</LicenseOutputFile> </PropertyGroup> <ItemGroup> <Licensee Include="Contoso"> <Id>C-1001</Id> <Company>Contoso Ltd</Company> <Email>info@contoso.com</Email> </Licensee> <Product Include="MyApp"> <Id>MYAPP</Id> <Version>2.1</Version> <Url>https://contoso.example</Url> </Product> <Feature Include="Pro"> <Data>1</Data> </Feature> <Field Include="Seats"> <Value>25</Value> </Field> <Restriction Include="Trial"> <TrialDays>30</TrialDays> <RunInstances>2</RunInstances> </Restriction> <Restriction Include="Hardware"> <HardwareKey>GPHI6-128DI-6196C-KN5LV-BCDRE</HardwareKey> </Restriction> </ItemGroup> <Target Name="MakeLicense" AfterTargets="Build"> <Lic LicDirectory="$(BabelDir)" InputFile="$(TargetPath)" OutputFile="$(LicenseOutputFile)" KeyFile="$(LicenseKeyFile)" Sign="rsa" ExpireDate="365" Encoding="utf-8" Licensee="@(Licensee)" Product="@(Product)" Features="@(Feature)" Fields="@(Field)" Restrictions="@(Restriction)" /> </Target> </Project>

Ce projet équivaut à la ligne de commande suivante :

lic MyApp.dll --keyfile keys\signing.pem --sign rsa --expiredate 365 --encoding utf-8 --licensee name=Contoso --licensee id=C-1001 --licensee company="Contoso Ltd" --licensee email=info@contoso.com --product name=MyApp --product id=MYAPP --product version=2.1 --product url=https://contoso.example --feature def=... --field def=... --trial days=30 --trial instances=2 --hardware key=GPHI6-128DI-6196C-KN5LV-BCDRE --output MyApp.licenses

Définissez ProvideCommandLineArgs="true" et lisez l’élément de sortie CommandLineArgs pour voir la ligne de commande exacte construite par la tâche.

Propriétés de la tâche

Chaque propriété correspond à l’option de même signification dans la Référence. Les propriétés scalaires reçoivent une chaîne ; les propriétés d’éléments reçoivent une liste d’éléments.

Entrée et sortie

PropriétéOptionDescription
InputFilepremier argumentL’assembly à mettre sous licence, ou le fichier de licence à mettre à jour ou à vérifier.
Project--projectUn fichier de projet .lcproj dont les paramètres sont appliqués en premier.
Assemblies--assemblyÉléments désignant d’autres assemblies, par fichier ou par nom, à ajouter à la licence.
OutputFile--outputLe fichier de licence de sortie.
Format--formatxml, serial, base32 ou ascii ; également json ou ndjson pour la sortie console de la tâche.
Encoding--encodingEncodage des caractères du fichier de licence XML.
XmlDeclaration--[no]xmldeclarationIndique s’il faut écrire la déclaration XML.
GenerateKeyInfo--[no]keyinfoIndique s’il faut inclure les informations de clé publique dans l’élément de signature RSA.
MakeProject--makeprojectÉcrit un fichier de projet .lcproj avec les paramètres effectifs.
GenerateLogFile, LogFile--logfileRedirige la sortie console vers un fichier journal, nommé par LogFile ou d’après le fichier de sortie.

Clés et signature

PropriétéOptionDescription
KeyFile--keyfileFichier de clé PEM, SNK ou PFX.
KeyContainer--keynameNom du conteneur de clés.
KeyPwd--keypwdMot de passe d’un fichier de clé PFX.
KeyGen--keygenrsa ou ecdsa : génère une nouvelle paire de clés dans KeyFile.
KeySize--keysizeTaille de clé pour KeyGen.
Sign--signSigne la licence : rsa, ecdsa ou dsig. La licence n’est pas signée lorsque cette propriété est vide.
Verify--verifytrue pour vérifier la signature de InputFile au lieu de générer une licence.

Contenu de la licence

PropriétéOptionDescription
LicenseId--idIdentifiant de licence.
LicenseType--typeTexte du type de licence.
IssueDate--issuedateDate d’émission.
ExpireDate--expiredateDate d’expiration, ou nombre de jours.
Licensee--licenseeUn élément : Include est le nom ; métadonnées Id, Name, Company, Email.
Product--productUn élément : Include est le nom ; métadonnées Id, Name, Version, Copyright, Description, Url.
Components--componentÉléments désignant les composants sous licence.
Features--featureÉléments : Include est un chemin de fichier, ou le nom de la fonctionnalité avec les métadonnées Id, Name, Description, Key, Data, ExpireDate, SupportExpireDate.
Fields--fieldÉléments : Include est un chemin de fichier, ou le nom du champ avec les métadonnées Id, Name, Value.
Restrictionsoptions de restrictionÉléments dont Include sélectionne le type de restriction ; voir Éléments de restriction.
Update--updateMet à jour, dans InputFile, la licence portant l’identifiant indiqué, ou toutes les licences avec all.

Éléments de restriction

La valeur Include d’un élément Restriction sélectionne l’option, sans tenir compte de la casse, et les métadonnées fournissent ses paires key=value. Toute autre valeur de Include est traitée comme le nom d’une restriction personnalisée, passé à --restriction avec chaque métadonnée comme paire ; les types personnalisés nécessitent un assembly d’extension indiqué dans Register.

IncludeOptionMétadonnées
Trial--trialTrialDays (ou ExpireDays), RunCount, RunInstances (ou AllowedInstances), RunTime (ou UsageTime), Terms.
Hardware--hardwareHardwareKey (ou Key), Data.
Domain--domainName, Role.
Usage--usageType, CanRunOnVirtualMachine (ou CanRunInVirtualEnvironment), ProcessList.
Beta--betaBuildType, RecentChanges, Description.

Identification du matériel

PropriétéOptionDescription
HardwareId--hardwareidÉléments désignant les composants à partir desquels la clé matérielle est dérivée.
Salt--saltSel de la clé matérielle.
ShowHardwareInfo--showhardwareinfoAffiche les informations matérielles de la machine de build.

Outil et diagnostics

PropriétéOptionDescription
License--licenseÉléments indiquant les chemins du fichier de licence de l’outil lui-même ou des dossiers de recherche.
LicDirectoryDossier contenant le lic.exe à exécuter, par exemple la racine de l’archive zip Babel extraite.
Register--registerÉléments désignant les assemblies d’extension à charger.
ShowLogo--[no]logoIndique s’il faut afficher la bannière.
VerboseLevel--verboseNiveau de détail de la console.
NoConfiguration--noconfigIgnore la configuration par défaut de l’outil.
ProvideCommandLineArgstrue pour exposer la ligne de commande générée dans l’élément de sortie CommandLineArgs.

Fichiers de projet

Un fichier .lcproj est un projet MSBuild ordinaire qui inscrit la tâche Lic et l’appelle depuis une cible MakeLicense, avec les paramètres d’une génération de licence. lic --makeproject en écrit un à partir des options de la ligne de commande en cours, à côté du fichier de sortie sauf si un nom est indiqué, et génère tout de même la licence. lic --project lit un tel fichier et l’exécute, en appliquant par-dessus les éventuelles options supplémentaires, sans appeler MSBuild ; le fichier peut aussi être généré avec msbuild ou dotnet build sur une machine où la tâche est inscrite.

lic MyApp.dll --keyfile keys.pem --sign --licensee name=Contoso --expiredate 365 --output MyApp.licenses --makeproject MyApp.lcproj lic --project MyApp.lcproj --licensee name="Fabrikam" --output Fabrikam.licenses

Le fichier de projet conserve une trace reproductible de la façon dont une licence a été produite, et réunit la génération propre à un client dans un seul fichier que vous pouvez versionner, relire et réexécuter.

Last updated on