Skip to Content
Nuova versione 12 disponibile 🎉

Task MSBuild Lic Server

Il task Lic esegue la riga di comando lic da un progetto MSBuild, così una build può generare e firmare licenze con le stesse proprietà della riga di comando.

Il task Lic si trova in Babel.Build.dll, lo stesso assembly che fornisce il task Babel dell’offuscatore. Costruisce una riga di comando lic dalle sue proprietà e dai suoi elementi ed esegue lic.exe, quindi tutto ciò che il Riferimento della riga di comando descrive è disponibile da un file di progetto. Viene usato in due casi:

  • I tuoi progetti MSBuild, per esempio per emettere una licenza di test per l’applicazione sotto test, oppure per generare le licenze dei clienti da un server di build.
  • I file di progetto .lcproj, che lic --makeproject scrive a partire da una riga di comando e lic --project esegue di nuovo; vedi File di progetto.

Registrare il task

Referenzia l’assembly del task con un elemento UsingTask che punta a Babel.Build.dll. Nei pacchetti zip di Babel si trova nella cartella MSBuild, quindi con BabelDir impostata sulla cartella in cui è stato estratto babel_net472_<version>.zip:

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

Il task esegue lic.exe dalla cartella impostata con LicDirectory. Se manca, il task cerca accanto a Babel.Build.dll e poi nella cartella indicata dalla variabile d’ambiente BABEL_INSTALL_DIRECTORY. Poiché lic.exe si trova nella radice del pacchetto zip estratto e non nella sua cartella MSBuild, imposta LicDirectory su quella radice, come fa l’esempio qui sotto.

Con LicDirectory impostata, il task esegue lic.exe, che richiede Windows. Anche i pacchetti zip babel_net80, babel_net90 e babel_net100 contengono MSBuild/Babel.Build.dll e lic.dll: quando MSBuild è eseguito dall’host dotnet e il task trova lic.dll senza LicDirectory, lo esegue tramite dotnet. Dove è disponibile solo il Babel Licensing Tool, esegui invece lic da un task Exec; le opzioni sono le stesse.

Un esempio completo

Il progetto seguente genera, al termine della build, una licenza firmata per l’assembly compilato. Intestatario, prodotto, funzionalità, campi e restrizioni sono elementi MSBuild i cui metadati diventano le coppie key=value delle opzioni corrispondenti:

<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>

Equivale alla riga di comando:

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

Imposta ProvideCommandLineArgs="true" e leggi l’elemento di output CommandLineArgs per vedere l’esatta riga di comando costruita dal task.

Proprietà del task

Ogni proprietà corrisponde all’opzione con lo stesso significato nel Riferimento della riga di comando. Le proprietà scalari accettano una stringa; le proprietà di tipo elemento accettano un elenco di elementi.

Input e output

ProprietàOpzioneDescrizione
InputFileprimo argomentoL’assembly per cui emettere la licenza, oppure il file di licenza da aggiornare o verificare.
Project--projectUn file di progetto .lcproj le cui impostazioni vengono applicate per prime.
Assemblies--assemblyElementi che indicano altri assembly, per file o per nome, da aggiungere alla licenza.
OutputFile--outputIl file di licenza di output.
Format--formatxml, serial, base32 o ascii; anche json o ndjson per l’output di console del task.
Encoding--encodingCodifica dei caratteri del file di licenza XML.
XmlDeclaration--[no]xmldeclarationIndica se scrivere la dichiarazione XML.
GenerateKeyInfo--[no]keyinfoIndica se includere le informazioni sulla chiave pubblica nell’elemento della firma RSA.
MakeProject--makeprojectScrive un file di progetto .lcproj con le impostazioni effettive.
GenerateLogFile, LogFile--logfileReindirizza l’output di console su un file di log, il cui nome è dato da LogFile o ricavato dal file di output.

Chiavi e firma

ProprietàOpzioneDescrizione
KeyFile--keyfileFile di chiavi PEM, SNK o PFX.
KeyContainer--keynameNome del contenitore di chiavi.
KeyPwd--keypwdPassword di un file di chiavi PFX.
KeyGen--keygenrsa o ecdsa: genera una nuova coppia di chiavi in KeyFile.
KeySize--keysizeDimensione della chiave per KeyGen.
Sign--signFirma la licenza: rsa, ecdsa o dsig. Quando questa proprietà è vuota la licenza non è firmata.
Verify--verifytrue per verificare la firma di InputFile invece di generare una licenza.

Contenuto della licenza

ProprietàOpzioneDescrizione
LicenseId--idIdentificatore della licenza.
LicenseType--typeTesto del tipo di licenza.
IssueDate--issuedateData di emissione.
ExpireDate--expiredateData di scadenza, oppure un numero di giorni.
Licensee--licenseeUn solo elemento: Include è il nome; metadati Id, Name, Company, Email.
Product--productUn solo elemento: Include è il nome; metadati Id, Name, Version, Copyright, Description, Url.
Components--componentElementi che indicano i componenti concessi in licenza.
Features--featureElementi: Include è il percorso di un file, oppure il nome della funzionalità con i metadati Id, Name, Description, Key, Data, ExpireDate, SupportExpireDate.
Fields--fieldElementi: Include è il percorso di un file, oppure il nome del campo con i metadati Id, Name, Value.
Restrictionsopzioni delle restrizioniElementi il cui Include seleziona il tipo di restrizione; vedi Elementi di restrizione.
Update--updateAggiorna in InputFile la licenza con l’identificatore indicato, oppure all.

Elementi di restrizione

Il valore Include di un elemento Restriction seleziona l’opzione, senza distinzione tra maiuscole e minuscole, e i metadati ne forniscono le coppie key=value. Qualsiasi altro valore di Include è trattato come il nome di una restrizione personalizzata e passato a --restriction, con ogni metadato come coppia; i tipi personalizzati richiedono un assembly di estensione elencato in Register.

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

Identificazione dell’hardware

ProprietàOpzioneDescrizione
HardwareId--hardwareidElementi che indicano i componenti da cui ricavare la chiave hardware.
Salt--saltSalt per la chiave hardware.
ShowHardwareInfo--showhardwareinfoStampa le informazioni hardware del computer di build.

Strumento e diagnostica

ProprietàOpzioneDescrizione
License--licenseElementi con i percorsi del file di licenza dello strumento stesso o delle cartelle in cui cercarlo.
LicDirectoryCartella che contiene il lic.exe da eseguire, per esempio la radice del pacchetto zip di Babel estratto.
Register--registerElementi che indicano gli assembly di estensione da caricare.
ShowLogo--[no]logoIndica se stampare il banner.
VerboseLevel--verboseLivello di dettaglio della console.
NoConfiguration--noconfigIgnora la configurazione predefinita dello strumento.
ProvideCommandLineArgstrue per esporre la riga di comando generata nell’elemento di output CommandLineArgs.

File di progetto

Un file .lcproj è un normale progetto MSBuild che registra il task Lic e lo chiama da un target MakeLicense, con le impostazioni di una generazione di licenza. lic --makeproject ne scrive uno a partire dalle opzioni della riga di comando corrente, accanto al file di output se non indichi un nome, e genera comunque la licenza. lic --project legge un file di questo tipo e lo esegue, applicando sopra le eventuali altre opzioni, senza richiamare MSBuild; il file può anche essere compilato con msbuild o dotnet build su un computer in cui il task è registrato.

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

Il file di progetto conserva una traccia riproducibile di come è stata prodotta una licenza, e riduce una generazione specifica per un cliente a un unico file che puoi mettere sotto controllo di versione, rivedere ed eseguire di nuovo.

Last updated on