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, dielic --makeprojectaus einer Befehlszeile schreibt undlic --projecterneut 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.licensesSetzen 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
| Eigenschaft | Schalter | Beschreibung |
|---|---|---|
InputFile | erstes Argument | Die zu lizenzierende Assembly oder die Lizenzdatei, die aktualisiert oder geprüft werden soll. |
Project | --project | Eine Projektdatei .lcproj, deren Einstellungen zuerst angewendet werden. |
Assemblies | --assembly | Elemente, die weitere Assemblys nach Datei oder nach Name nennen, um sie in die Lizenz aufzunehmen. |
OutputFile | --output | Die auszugebende Lizenzdatei. |
Format | --format | xml, serial, base32 oder ascii, außerdem json oder ndjson für die Konsolenausgabe der Aufgabe. |
Encoding | --encoding | Zeichencodierung der XML-Lizenzdatei. |
XmlDeclaration | --[no]xmldeclaration | Ob die XML-Deklaration geschrieben wird. |
GenerateKeyInfo | --[no]keyinfo | Ob die Informationen zum öffentlichen Schlüssel in das Element der RSA-Signatur aufgenommen werden. |
MakeProject | --makeproject | Schreibt eine Projektdatei .lcproj mit den wirksamen Einstellungen. |
GenerateLogFile, LogFile | --logfile | Leitet die Konsolenausgabe in eine Protokolldatei um, benannt nach LogFile oder nach der Ausgabedatei. |
Schlüssel und Signatur
| Eigenschaft | Schalter | Beschreibung |
|---|---|---|
KeyFile | --keyfile | Schlüsseldatei im Format PEM, SNK oder PFX. |
KeyContainer | --keyname | Name des Schlüsselcontainers. |
KeyPwd | --keypwd | Passwort einer PFX-Schlüsseldatei. |
KeyGen | --keygen | rsa oder ecdsa: erzeugt ein neues Schlüsselpaar in KeyFile. |
KeySize | --keysize | Schlüsselgröße für KeyGen. |
Sign | --sign | Signiert die Lizenz: rsa, ecdsa oder dsig. Ist diese Eigenschaft leer, bleibt die Lizenz unsigniert. |
Verify | --verify | true, um die Signatur von InputFile zu prüfen, statt eine Lizenz zu erzeugen. |
Inhalt der Lizenz
| Eigenschaft | Schalter | Beschreibung |
|---|---|---|
LicenseId | --id | Lizenz-ID. |
LicenseType | --type | Text des Lizenztyps. |
IssueDate | --issuedate | Ausstellungsdatum. |
ExpireDate | --expiredate | Ablaufdatum oder eine Anzahl von Tagen. |
Licensee | --licensee | Ein Element: Include ist der Name, dazu die Metadaten Id, Name, Company, Email. |
Product | --product | Ein Element: Include ist der Name, dazu die Metadaten Id, Name, Version, Copyright, Description, Url. |
Components | --component | Elemente, die die lizenzierten Komponenten nennen. |
Features | --feature | Elemente: Include ist ein Dateipfad oder der Name der Funktion mit den Metadaten Id, Name, Description, Key, Data, ExpireDate, SupportExpireDate. |
Fields | --field | Elemente: Include ist ein Dateipfad oder der Name des Feldes mit den Metadaten Id, Name, Value. |
Restrictions | Schalter der Einschränkungen | Elemente, deren Include den Typ der Einschränkung wählt, siehe Einschränkungselemente. |
Update | --update | Aktualisiert 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.
| Include | Schalter | Metadaten |
|---|---|---|
Trial | --trial | TrialDays (oder ExpireDays), RunCount, RunInstances (oder AllowedInstances), RunTime (oder UsageTime), Terms. |
Hardware | --hardware | HardwareKey (oder Key), Data. |
Domain | --domain | Name, Role. |
Usage | --usage | Type, CanRunOnVirtualMachine (oder CanRunInVirtualEnvironment), ProcessList. |
Beta | --beta | BuildType, RecentChanges, Description. |
Hardware-Identifikation
| Eigenschaft | Schalter | Beschreibung |
|---|---|---|
HardwareId | --hardwareid | Elemente, die die Komponenten nennen, aus denen der Hardwareschlüssel abgeleitet wird. |
Salt | --salt | Salt für den Hardwareschlüssel. |
ShowHardwareInfo | --showhardwareinfo | Gibt die Hardwareinformationen des Buildrechners aus. |
Tool und Diagnose
| Eigenschaft | Schalter | Beschreibung |
|---|---|---|
License | --license | Elemente mit den Pfaden der eigenen Lizenzdatei des Tools oder der Suchordner. |
LicDirectory | Ordner, der die auszuführende lic.exe enthält, etwa der Stammordner des entpackten Zip-Pakets von Babel. | |
Register | --register | Elemente, die die zu ladenden Erweiterungs-Assemblys nennen. |
ShowLogo | --[no]logo | Ob das Banner ausgegeben wird. |
VerboseLevel | --verbose | Ausführlichkeit der Konsolenausgabe. |
NoConfiguration | --noconfig | Überspringt die Standardkonfiguration des Tools. |
ProvideCommandLineArgs | true, 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.licensesDie 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.