Skip to Content
Nueva versión 12 disponible 🎉

Tarea Lic de MSBuild Server

La tarea Lic ejecuta la línea de comandos lic desde un proyecto de MSBuild, de modo que una compilación puede generar y firmar licencias con las mismas propiedades que la línea de comandos.

La tarea Lic se encuentra en Babel.Build.dll, el mismo ensamblado que proporciona la tarea Babel del ofuscador. Construye una línea de comandos de lic a partir de sus propiedades y elementos y ejecuta lic.exe, de modo que todo lo que describe la Referencia está disponible desde un archivo de proyecto. Se usa en dos casos:

  • En sus propios proyectos de MSBuild, por ejemplo para emitir una licencia de prueba para la aplicación que se está probando, o para generar licencias de clientes desde un servidor de compilación.
  • En los archivos de proyecto .lcproj, que lic --makeproject escribe a partir de una línea de comandos y lic --project vuelve a ejecutar; consulte Archivos de proyecto.

Registrar la tarea

Haga referencia al ensamblado de la tarea con un elemento UsingTask que apunte a Babel.Build.dll. En los paquetes zip de Babel está en la carpeta MSBuild, así que, con BabelDir establecida en la carpeta en la que se extrajo babel_net472_<version>.zip:

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

La tarea ejecuta lic.exe desde la carpeta indicada en LicDirectory. Si no se establece, la tarea busca junto a Babel.Build.dll y después en la carpeta que indica la variable de entorno BABEL_INSTALL_DIRECTORY. Como lic.exe está en la raíz del paquete zip extraído, y no en su carpeta MSBuild, establezca LicDirectory en esa raíz, como hace el ejemplo de más abajo.

Con LicDirectory establecida, la tarea ejecuta lic.exe, que requiere Windows. Los paquetes zip babel_net80, babel_net90 y babel_net100 también contienen MSBuild/Babel.Build.dll y lic.dll: cuando MSBuild se ejecuta en el host dotnet y la tarea encuentra lic.dll sin LicDirectory, lo ejecuta a través de dotnet. Allí donde solo esté disponible la Herramienta Babel Licensing, ejecute en su lugar lic desde una tarea Exec; las opciones son las mismas.

Un ejemplo completo

El proyecto siguiente genera, después de la compilación, una licencia firmada para el ensamblado compilado. El titular de la licencia, el producto, las funciones, los campos y las restricciones son elementos de MSBuild cuyos metadatos se convierten en los pares key=value de las opciones correspondientes:

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

Esto equivale a la línea de comandos:

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

Establezca ProvideCommandLineArgs="true" y lea el elemento de salida CommandLineArgs para ver la línea de comandos exacta que construyó la tarea.

Propiedades de la tarea

Cada propiedad corresponde a la opción del mismo significado en la Referencia. Las propiedades escalares reciben una cadena; las propiedades de elementos reciben una lista de elementos.

Entrada y salida

PropiedadOpciónDescripción
InputFileprimer argumentoEl ensamblado que se va a licenciar, o el archivo de licencia que se va a actualizar o verificar.
Project--projectUn archivo de proyecto .lcproj cuyos ajustes se aplican primero.
Assemblies--assemblyElementos que indican otros ensamblados, por archivo o por nombre, que se añaden a la licencia.
OutputFile--outputEl archivo de licencia de salida.
Format--formatxml, serial, base32 o ascii; también json o ndjson para la salida de consola de la tarea.
Encoding--encodingCodificación de caracteres del archivo de licencia XML.
XmlDeclaration--[no]xmldeclarationSi se escribe la declaración XML.
GenerateKeyInfo--[no]keyinfoSi se incluye la información de la clave pública en el elemento de la firma RSA.
MakeProject--makeprojectEscribe un archivo de proyecto .lcproj con los ajustes efectivos.
GenerateLogFile, LogFile--logfileRedirige la salida de consola a un archivo de registro, cuyo nombre se toma de LogFile o del archivo de salida.

Claves y firma

PropiedadOpciónDescripción
KeyFile--keyfileArchivo de claves PEM, SNK o PFX.
KeyContainer--keynameNombre del contenedor de claves.
KeyPwd--keypwdContraseña de un archivo de claves PFX.
KeyGen--keygenrsa o ecdsa: genera un par de claves nuevo en KeyFile.
KeySize--keysizeTamaño de la clave para KeyGen.
Sign--signFirma la licencia: rsa, ecdsa o dsig. La licencia queda sin firmar cuando esta propiedad está vacía.
Verify--verifytrue para verificar la firma de InputFile en lugar de generar una licencia.

Contenido de la licencia

PropiedadOpciónDescripción
LicenseId--idIdentificador de la licencia.
LicenseType--typeTexto del tipo de licencia.
IssueDate--issuedateFecha de emisión.
ExpireDate--expiredateFecha de caducidad, o un número de días.
Licensee--licenseeUn elemento: Include es el nombre; metadatos Id, Name, Company, Email.
Product--productUn elemento: Include es el nombre; metadatos Id, Name, Version, Copyright, Description, Url.
Components--componentElementos que indican los componentes con licencia.
Features--featureElementos: Include es una ruta de archivo, o el nombre de la función con los metadatos Id, Name, Description, Key, Data, ExpireDate, SupportExpireDate.
Fields--fieldElementos: Include es una ruta de archivo, o el nombre del campo con los metadatos Id, Name, Value.
Restrictionsopciones de restricciónElementos cuyo Include selecciona el tipo de restricción; consulte Elementos de restricción.
Update--updateActualiza en InputFile la licencia con el identificador indicado, o all.

Elementos de restricción

El valor Include de un elemento Restriction selecciona la opción, sin distinguir mayúsculas de minúsculas, y los metadatos proporcionan sus pares key=value. Cualquier otro valor de Include se trata como el nombre de una restricción personalizada, que se pasa a --restriction con cada metadato como un par; los tipos personalizados necesitan un ensamblado de extensión incluido en Register.

IncludeOpciónMetadatos
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.

Identificación del hardware

PropiedadOpciónDescripción
HardwareId--hardwareidElementos que indican los componentes de los que se deriva la clave de hardware.
Salt--saltSal para la clave de hardware.
ShowHardwareInfo--showhardwareinfoMuestra la información de hardware del equipo de compilación.

Herramienta y diagnóstico

PropiedadOpciónDescripción
License--licenseElementos con las rutas del archivo de licencia de la propia herramienta o de las carpetas de búsqueda.
LicDirectoryCarpeta que contiene el lic.exe que se va a ejecutar, como la raíz del paquete zip de Babel extraído.
Register--registerElementos que indican los ensamblados de extensión que se cargan.
ShowLogo--[no]logoSi se muestra el banner.
VerboseLevel--verboseNivel de detalle de la consola.
NoConfiguration--noconfigOmite la configuración predeterminada de la herramienta.
ProvideCommandLineArgstrue para exponer la línea de comandos generada en el elemento de salida CommandLineArgs.

Archivos de proyecto

Un archivo .lcproj es un proyecto de MSBuild corriente que registra la tarea Lic y la llama desde un destino MakeLicense, con los ajustes de la generación de una licencia. lic --makeproject escribe uno a partir de las opciones de la línea de comandos actual, junto al archivo de salida salvo que se indique un nombre, y genera igualmente la licencia. lic --project lee un archivo de este tipo y lo ejecuta, aplicando encima las demás opciones, sin invocar MSBuild; el archivo también se puede compilar con msbuild o dotnet build en un equipo donde la tarea esté registrada.

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

El archivo de proyecto conserva un registro reproducible de cómo se produjo una licencia, y hace que la generación específica de un cliente sea un único archivo que se puede versionar, revisar y volver a ejecutar.

Last updated on