Skip to Content
Neue Version 12 verfügbar 🎉
LicensingBefehlszeileMSBuild-Aufgabe

Lic-MSBuild-Aufgabe Server

Die Aufgabe Lic führt die Befehlszeile lic aus einem MSBuild-Projekt aus. So kann ein Build Lizenzen mit denselben Eigenschaften wie die Befehlszeile erzeugen und signieren.

Die Aufgabe Lic liegt in Babel.Build.dll, derselben Assembly, die auch die Babel-Aufgabe des Obfuscators bereitstellt. Sie baut aus ihren Eigenschaften und Elementen eine Befehlszeile für lic auf und führt lic.exe aus. Damit steht alles, was die Referenz beschreibt, in einer Projektdatei zur Verfügung. Sie wird an zwei Stellen verwendet:

  • In Ihren eigenen MSBuild-Projekten, zum Beispiel um eine Testlizenz für die zu testende Anwendung auszustellen oder um Kundenlizenzen auf einem Buildserver zu erzeugen.
  • In Projektdateien .lcproj, die lic --makeproject aus einer Befehlszeile schreibt und lic --project erneut ausführt, siehe Projektdateien.

Die Aufgabe registrieren

Referenzieren Sie die Assembly der Aufgabe mit einem Element UsingTask, das auf Babel.Build.dll zeigt. In den Zip-Paketen von Babel liegt sie im Ordner MSBuild. Wenn BabelDir auf den Ordner gesetzt ist, in den babel_net472_<version>.zip entpackt wurde, lautet das Element:

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

Die Aufgabe führt lic.exe aus dem Ordner aus, den LicDirectory festlegt. Fehlt die Eigenschaft, sucht die Aufgabe neben Babel.Build.dll und danach in dem Ordner, den die Umgebungsvariable BABEL_INSTALL_DIRECTORY nennt. Weil lic.exe im Stammordner des entpackten Zip-Pakets liegt und nicht in dessen Ordner MSBuild, setzen Sie LicDirectory auf diesen Stammordner, wie es das folgende Beispiel tut.

Ist LicDirectory gesetzt, führt die Aufgabe lic.exe aus, und das setzt Windows voraus. Die Zip-Pakete babel_net80, babel_net90 und babel_net100 enthalten ebenfalls MSBuild/Babel.Build.dll und lic.dll: Wenn MSBuild unter dem Host dotnet läuft und die Aufgabe lic.dll ohne LicDirectory findet, führt sie die Datei über dotnet aus. Wo nur das Babel Licensing Tool verfügbar ist, führen Sie lic stattdessen aus einer Aufgabe Exec aus. Die Schalter sind dieselben.

Ein vollständiges Beispiel

Das folgende Projekt erzeugt nach dem Build eine signierte Lizenz für die erstellte Assembly. Lizenznehmer, Produkt, Funktionen, Felder und Einschränkungen sind MSBuild-Elemente, deren Metadaten zu den Paaren key=value der entsprechenden Schalter werden:

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

Das entspricht der Befehlszeile:

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

Setzen Sie ProvideCommandLineArgs="true" und lesen Sie das Ausgabeelement CommandLineArgs, um die genaue Befehlszeile zu sehen, die die Aufgabe aufgebaut hat.

Eigenschaften der Aufgabe

Jede Eigenschaft entspricht dem Schalter gleicher Bedeutung in der Referenz. Skalare Eigenschaften erwarten eine Zeichenfolge, Elementeigenschaften eine Elementliste.

Eingabe und Ausgabe

EigenschaftSchalterBeschreibung
InputFileerstes ArgumentDie zu lizenzierende Assembly oder die Lizenzdatei, die aktualisiert oder geprüft werden soll.
Project--projectEine Projektdatei .lcproj, deren Einstellungen zuerst angewendet werden.
Assemblies--assemblyElemente, die weitere Assemblys nach Datei oder nach Name nennen, um sie in die Lizenz aufzunehmen.
OutputFile--outputDie auszugebende Lizenzdatei.
Format--formatxml, serial, base32 oder ascii, außerdem json oder ndjson für die Konsolenausgabe der Aufgabe.
Encoding--encodingZeichencodierung der XML-Lizenzdatei.
XmlDeclaration--[no]xmldeclarationOb die XML-Deklaration geschrieben wird.
GenerateKeyInfo--[no]keyinfoOb die Informationen zum öffentlichen Schlüssel in das Element der RSA-Signatur aufgenommen werden.
MakeProject--makeprojectSchreibt eine Projektdatei .lcproj mit den wirksamen Einstellungen.
GenerateLogFile, LogFile--logfileLeitet die Konsolenausgabe in eine Protokolldatei um, benannt nach LogFile oder nach der Ausgabedatei.

Schlüssel und Signatur

EigenschaftSchalterBeschreibung
KeyFile--keyfileSchlüsseldatei im Format PEM, SNK oder PFX.
KeyContainer--keynameName des Schlüsselcontainers.
KeyPwd--keypwdPasswort einer PFX-Schlüsseldatei.
KeyGen--keygenrsa oder ecdsa: erzeugt ein neues Schlüsselpaar in KeyFile.
KeySize--keysizeSchlüsselgröße für KeyGen.
Sign--signSigniert die Lizenz: rsa, ecdsa oder dsig. Ist diese Eigenschaft leer, bleibt die Lizenz unsigniert.
Verify--verifytrue, um die Signatur von InputFile zu prüfen, statt eine Lizenz zu erzeugen.

Inhalt der Lizenz

EigenschaftSchalterBeschreibung
LicenseId--idLizenz-ID.
LicenseType--typeText des Lizenztyps.
IssueDate--issuedateAusstellungsdatum.
ExpireDate--expiredateAblaufdatum oder eine Anzahl von Tagen.
Licensee--licenseeEin Element: Include ist der Name, dazu die Metadaten Id, Name, Company, Email.
Product--productEin Element: Include ist der Name, dazu die Metadaten Id, Name, Version, Copyright, Description, Url.
Components--componentElemente, die die lizenzierten Komponenten nennen.
Features--featureElemente: Include ist ein Dateipfad oder der Name der Funktion mit den Metadaten Id, Name, Description, Key, Data, ExpireDate, SupportExpireDate.
Fields--fieldElemente: Include ist ein Dateipfad oder der Name des Feldes mit den Metadaten Id, Name, Value.
RestrictionsSchalter der EinschränkungenElemente, deren Include den Typ der Einschränkung wählt, siehe Einschränkungselemente.
Update--updateAktualisiert in InputFile die Lizenz mit der angegebenen ID oder all.

Einschränkungselemente

Der Wert Include eines Elements Restriction wählt den Schalter, ohne Beachtung der Groß- und Kleinschreibung, und die Metadaten liefern dessen Paare key=value. Jeder andere Wert von Include gilt als Name einer benutzerdefinierten Einschränkung und wird an --restriction übergeben, mit jedem Metadatum als Paar. Benutzerdefinierte Typen brauchen eine Erweiterungs-Assembly, die in Register aufgeführt ist.

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

Hardware-Identifikation

EigenschaftSchalterBeschreibung
HardwareId--hardwareidElemente, die die Komponenten nennen, aus denen der Hardwareschlüssel abgeleitet wird.
Salt--saltSalt für den Hardwareschlüssel.
ShowHardwareInfo--showhardwareinfoGibt die Hardwareinformationen des Buildrechners aus.

Tool und Diagnose

EigenschaftSchalterBeschreibung
License--licenseElemente mit den Pfaden der eigenen Lizenzdatei des Tools oder der Suchordner.
LicDirectoryOrdner, der die auszuführende lic.exe enthält, etwa der Stammordner des entpackten Zip-Pakets von Babel.
Register--registerElemente, die die zu ladenden Erweiterungs-Assemblys nennen.
ShowLogo--[no]logoOb das Banner ausgegeben wird.
VerboseLevel--verboseAusführlichkeit der Konsolenausgabe.
NoConfiguration--noconfigÜberspringt die Standardkonfiguration des Tools.
ProvideCommandLineArgstrue, um die erzeugte Befehlszeile im Ausgabeelement CommandLineArgs bereitzustellen.

Projektdateien

Eine Datei .lcproj ist ein gewöhnliches MSBuild-Projekt, das die Aufgabe Lic registriert und sie aus einem Ziel MakeLicense aufruft, mit den Einstellungen einer einzelnen Lizenzerzeugung. lic --makeproject schreibt eine solche Datei aus den Schaltern der aktuellen Befehlszeile, neben die Ausgabedatei, sofern kein Name angegeben ist, und erzeugt die Lizenz trotzdem. lic --project liest eine solche Datei und führt sie aus, wobei weitere Schalter zusätzlich angewendet werden, ohne MSBuild aufzurufen. Die Datei lässt sich auch mit msbuild oder dotnet build auf einem Rechner erstellen, auf dem die Aufgabe registriert ist.

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

Die Projektdatei hält reproduzierbar fest, wie eine Lizenz entstanden ist, und gibt einer kundenspezifischen Erzeugung eine einzige Datei, die Sie versionieren, prüfen und erneut ausführen können.

Last updated on