Lic MSBuild タスク Server
Lic タスクは、MSBuild プロジェクトから lic コマンドラインを実行します。これにより、コマンドラインと同じプロパティを使って、ビルドでライセンスを生成、署名できます。
Lic タスクは Babel.Build.dll に含まれています。これは、難読化ツールの Babel タスクを提供するのと同じアセンブリです。このタスクは、プロパティと項目から lic のコマンドラインを組み立てて lic.exe を実行するため、リファレンスで説明している内容はすべてプロジェクトファイルから利用できます。このタスクを使用するのは、次の 2 つです。
- 独自の MSBuild プロジェクト:たとえば、テスト対象のアプリケーション用にテストライセンスを発行したり、ビルドサーバーから顧客向けのライセンスを生成したりする場合。
.lcprojプロジェクトファイル:lic --makeprojectがコマンドラインから書き出し、lic --projectが再び実行するファイルです。プロジェクトファイルを参照してください。
タスクの登録
Babel.Build.dll を指す UsingTask 要素で、タスクのアセンブリを参照します。Babel の zip パッケージでは、このアセンブリは MSBuild フォルダーにあります。babel_net472_<version>.zip を展開したフォルダーを BabelDir に設定した場合は、次のようになります。
<UsingTask TaskName="Lic" AssemblyFile="$(BabelDir)\MSBuild\Babel.Build.dll" />タスクは、LicDirectory で設定したフォルダーにある lic.exe を実行します。設定がない場合、タスクは Babel.Build.dll と同じフォルダーを探し、次に BABEL_INSTALL_DIRECTORY 環境変数が示すフォルダーを探します。lic.exe は、展開した zip パッケージの MSBuild フォルダーではなくルートにあるため、後述の例のように、LicDirectory にはそのルートを設定してください。
LicDirectory を設定すると、タスクは lic.exe を実行します。これには Windows が必要です。babel_net80、babel_net90、babel_net100 の zip パッケージにも、MSBuild/Babel.Build.dll と lic.dll が含まれています。MSBuild が dotnet ホストで実行され、LicDirectory なしでタスクが lic.dll を見つけた場合、タスクは dotnet を通じてそれを実行します。Babel Licensing ツールしか使用できない環境では、代わりに Exec タスクから lic を実行してください。スイッチは同じです。
完全な例
次のプロジェクトは、ビルドの後に、ビルドしたアセンブリ用の署名付きライセンスを生成します。ライセンシー、製品、機能、フィールド、制限は MSBuild の項目で、そのメタデータが、対応するスイッチの key=value のペアになります。
<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>これは、次のコマンドラインと同等です。
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タスクが組み立てた正確なコマンドラインを確認するには、ProvideCommandLineArgs="true" を設定して、CommandLineArgs 出力項目を読み取ります。
タスクのプロパティ
各プロパティは、リファレンスにある同じ意味のスイッチに対応します。スカラープロパティは文字列を受け取り、項目プロパティは項目リストを受け取ります。
入力と出力
| プロパティ | スイッチ | 説明 |
|---|---|---|
InputFile | 最初の引数 | ライセンスの対象となるアセンブリ、または更新や検証の対象となるライセンスファイル。 |
Project | --project | .lcproj プロジェクトファイル。その設定が最初に適用されます。 |
Assemblies | --assembly | ライセンスに追加するほかのアセンブリを、ファイルまたは名前で指定する項目。 |
OutputFile | --output | 出力するライセンスファイル。 |
Format | --format | xml、serial、base32、ascii のいずれか。タスクのコンソール出力用に json または ndjson も指定できます。 |
Encoding | --encoding | XML ライセンスファイルの文字エンコーディング。 |
XmlDeclaration | --[no]xmldeclaration | XML 宣言を書き出すかどうか。 |
GenerateKeyInfo | --[no]keyinfo | RSA 署名要素に公開キーの情報を含めるかどうか。 |
MakeProject | --makeproject | 実際に使用された設定で .lcproj プロジェクトファイルを書き出します。 |
GenerateLogFile、LogFile | --logfile | コンソール出力をログファイルにリダイレクトします。ファイル名は、LogFile で指定するか、出力ファイルの名前から決まります。 |
キーと署名
| プロパティ | スイッチ | 説明 |
|---|---|---|
KeyFile | --keyfile | PEM、SNK、または PFX のキーファイル。 |
KeyContainer | --keyname | キーコンテナーの名前。 |
KeyPwd | --keypwd | PFX キーファイルのパスワード。 |
KeyGen | --keygen | rsa または ecdsa。新しいキーペアを生成して KeyFile に書き出します。 |
KeySize | --keysize | KeyGen のキーサイズ。 |
Sign | --sign | ライセンスに署名します。rsa、ecdsa、dsig のいずれか。このプロパティが空の場合、ライセンスは署名されません。 |
Verify | --verify | true を指定すると、ライセンスを生成する代わりに InputFile の署名を検証します。 |
ライセンスの内容
| プロパティ | スイッチ | 説明 |
|---|---|---|
LicenseId | --id | ライセンス ID。 |
LicenseType | --type | ライセンスの種類を表すテキスト。 |
IssueDate | --issuedate | 発行日。 |
ExpireDate | --expiredate | 有効期限、または日数。 |
Licensee | --licensee | 1 つの項目。Include が名前で、メタデータは Id、Name、Company、Email。 |
Product | --product | 1 つの項目。Include が名前で、メタデータは Id、Name、Version、Copyright、Description、Url。 |
Components | --component | ライセンス対象のコンポーネントを指定する項目。 |
Features | --feature | 項目。Include はファイルパス、または機能の名前です。名前の場合は、メタデータ Id、Name、Description、Key、Data、ExpireDate、SupportExpireDate を指定できます。 |
Fields | --field | 項目。Include はファイルパス、またはフィールドの名前です。名前の場合は、メタデータ Id、Name、Value を指定できます。 |
Restrictions | 制限のスイッチ | Include で制限の種類を選択する項目。制限の項目を参照してください。 |
Update | --update | InputFile 内の、指定した ID のライセンスを更新します。all を指定すると、すべてのライセンスを更新します。 |
制限の項目
Restriction 項目の Include の値によってスイッチが選択され(大文字と小文字は区別されません)、メタデータがその key=value のペアになります。それ以外の Include の値はカスタム制限の名前として扱われ、各メタデータをペアとして --restriction に渡されます。カスタムの種類には、Register に指定した拡張アセンブリが必要です。
| Include | スイッチ | メタデータ |
|---|---|---|
Trial | --trial | TrialDays(または ExpireDays)、RunCount、RunInstances(または AllowedInstances)、RunTime(または UsageTime)、Terms。 |
Hardware | --hardware | HardwareKey(または Key)、Data。 |
Domain | --domain | Name、Role。 |
Usage | --usage | Type、CanRunOnVirtualMachine(または CanRunInVirtualEnvironment)、ProcessList。 |
Beta | --beta | BuildType、RecentChanges、Description。 |
ハードウェアの識別
| プロパティ | スイッチ | 説明 |
|---|---|---|
HardwareId | --hardwareid | ハードウェアキーの算出元となるコンポーネントを指定する項目。 |
Salt | --salt | ハードウェアキーのソルト。 |
ShowHardwareInfo | --showhardwareinfo | ビルドを実行するコンピューターのハードウェア情報を表示します。 |
ツールと診断
| プロパティ | スイッチ | 説明 |
|---|---|---|
License | --license | ツール自体のライセンスファイルのパス、または検索するフォルダーのパスを指定する項目。 |
LicDirectory | 実行する lic.exe があるフォルダー。たとえば、展開した Babel zip パッケージのルート。 | |
Register | --register | 読み込む拡張アセンブリを指定する項目。 |
ShowLogo | --[no]logo | バナーを表示するかどうか。 |
VerboseLevel | --verbose | コンソールの詳細レベル。 |
NoConfiguration | --noconfig | ツールの既定の構成を読み込みません。 |
ProvideCommandLineArgs | true を指定すると、生成されたコマンドラインが CommandLineArgs 出力項目で参照できるようになります。 |
プロジェクトファイル
.lcproj ファイルは通常の MSBuild プロジェクトで、Lic タスクを登録し、1 回のライセンス生成の設定を使って MakeLicense ターゲットからタスクを呼び出します。lic --makeproject は、現在のコマンドラインのスイッチからこのファイルを書き出します。名前を指定しない場合は出力ファイルと同じ場所に書き出され、ライセンスも通常どおり生成されます。lic --project は、このファイルを読み込み、追加のスイッチがあればその上に適用して実行します。このとき MSBuild は呼び出されません。タスクが登録されているコンピューターでは、msbuild または dotnet build でこのファイルをビルドすることもできます。
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プロジェクトファイルは、ライセンスがどのように作成されたかを再現可能な形で記録します。顧客ごとのライセンス生成が 1 つのファイルにまとまるため、バージョン管理、レビュー、再実行ができます。