mirror of
https://github.com/microsoft/BCQuality.git
synced 2026-08-08 02:16:52 +01:00
50 lines
2.2 KiB
Markdown
50 lines
2.2 KiB
Markdown
---
|
|
bc-version: [all]
|
|
domain: architecture
|
|
keywords: [build, output, alpackages, duplicate, language-server, app-package, project-root, AL0197]
|
|
technologies: [al]
|
|
countries: [w1]
|
|
application-area: [all]
|
|
---
|
|
|
|
## Description
|
|
|
|
When `al_build` or the VS Code AL extension builds an AL project, the generated `.app` file is placed in the project root folder by default. Over successive builds, multiple `.app` files accumulate (e.g. `Publisher_AppName_28.0.0.1.app`, `28.0.0.4.app`, `28.0.0.7.app`). The AL language server — both in VS Code and in the MCP AL server — scans the project folder for symbol packages and may load these compiled artefacts alongside the live source files. This causes `AL0197` duplicate object errors for every object in the project, with error messages pointing to source lines rather than to the packaged artefact as the duplicate source.
|
|
|
|
The errors are not real. They disappear when the stale `.app` files are removed from the root.
|
|
|
|
## Rule
|
|
|
|
AL build output (`.app` files) **must not** accumulate in the project root folder.
|
|
|
|
Configure the build output path to a dedicated subfolder that is excluded from language server scanning.
|
|
|
|
In `.vscode/settings.json`:
|
|
```json
|
|
{
|
|
"al.outputPath": ".output"
|
|
}
|
|
```
|
|
|
|
When using the MCP `al_build` tool, pass `outputPath` explicitly:
|
|
```
|
|
al_build projectPath="..." outputPath=".output/AppName.app"
|
|
```
|
|
|
|
Add `.output/` to `.gitignore` if not already excluded.
|
|
|
|
## What NOT to do
|
|
|
|
- Do not allow `.app` files to accumulate in the project root without cleanup
|
|
- Do not interpret `AL0197` ("already declared by extension") as a source code error before first checking for stale `.app` files in the project root
|
|
- Do not add root `.app` files to `.gitignore` as a substitute for proper output path configuration — removal is required, not concealment
|
|
|
|
## Signal to watch for
|
|
|
|
If `al_build` or `al_getdiagnostics` reports `AL0197 — An application object ... is already declared by the extension '...'` for objects that exist only in source, inspect the project root for `.app` files before investigating source code.
|
|
|
|
## How to recover
|
|
|
|
1. Delete all `.app` files from the project root
|
|
2. Re-add the project: `al_addproject projectPath="..."`
|
|
3. Re-run `al_build` with an explicit `outputPath`
|