Cuando intentas trabajar en automatizaciones para los despliegues en los proyectos de Business Central (por ejemplo, los pipelines de DevOps) es interesante conocer la posibilidad de generar el fichero .app a partir de la solución sin necesidad de Visual Studio Code.
En el siguiente post vamos a ver de una forma rápida y sencilla como compilar nuestras soluciones desde línea de comandos.
AL COMPILER
Dentro de la extensión para Visual Studio Code se encuentra la herramienta necesaria para compilar las soluciones. Si no tenéis instalado la extensión lo primero que hay que hacer es instalarla (también se puede extraer del vsix directamente sin necesidad de instalarla, basta con renombrarlo a zip)
Si nos dirigimos a la ruta C:\Users\{USUARIO}\.vscode\extensions tendremos un listado de los directorios donde se encuentra cada extensión de VS Code.
Entraremos en el directorio de la extensión de AL Language. La localizaremos porque su nombre empezará por ms-dynamics-smb.al-{versión}
Una vez ahí, deberemos de localizar el ejecutable «alc.exe» que se encuentra dentro del directorio bin
Desde CMD si ejecutamos «alc.exe» con el parámetro /? accederemos a la ayuda y podremos ver que parámetros son necesarios para poder compilar nuestra solución.
Microsoft (R) AL Compiler version 6.1.5.31404
Copyright (C) Microsoft Corporation. All rights reserved
AL Compiler Options
- PROJECT DIRECTORY -
/project:<directory> Specify the project directory.
- OUTPUT FILE -
/out:<file> Specify the output package file name (default: the name is generated from the project manifest as <Publisher>_<Name>_<Version>.app).
- ERRORS AND WARNINGS -
/warnaserror[+|-] Report all warnings as errors.
/nowarn:<warn list> Turn off specific warning messages.
/errorlog:<file> Specify a file to log all compiler and analyzer diagnostics.
/ruleset:<file> Specify a ruleset file that alters severity of specific diagnostics.
/loglevel:level Specify the level of logs written to the log file. Values: Verbose, Normal, Warning, Error
/readonlyerrorsaswarnings Specifies if diagnostics generated by the compiler when attempting to access a read-only file should be emitted as warnings instead of errors.
- SETTINGS -
/packagecachepath:<directory> Specify the cache location for the symbols.
/assemblyprobingpaths:<directory list> Specify a list of directories which will be searched recursively for .NET assemblies referenced from AL.
/target:<target> Specify the compilation target.
/features:<feature list> List of feature flags.
- MISCELLANEOUS -
/parallel[+|-] Concurrent compilation. (Short form /p[+|-])
/maxdegreeofparallelism:<n> Specifies the maximum number of concurrent tasks the compiler should use when compiling the project.
/generatecode[+|-] Specifies whether metadata and code should be generated and packaged in the output file. (Default: Disabled)
/generatereportlayout[+|-] Specifies whether report layouts should be created and or updated with the dataset. (Default: Enabled)
/parallelemit Specifies whether the compiler to run csharp and metadata code emitting concurrently.
Los parámetros mínimos son:
- /project – Indica la ruta donde se encuentra la solución
- /packagecachepath – Indicaremos la ruta donde se encuentra los símbolos y las dependencias
Es decir, lo mínimo a ejecutar sería el comando con la siguiente estructura:
alc.exe /project:{RUTA SOLUCIÓN} /packagecachepath:{RUTA SIMBOLOS}
Como ejemplo, podríamos generar nuestra app de la siguiente manera
alc.exe /project:C:\Proyectos\MyApp /packagecachepath:C:\Proyectos\MyApp\.alpackages
Espero que os sirva 🙂