From 6f7e6ee2aca574cf16c88f9622bfdd6005842af3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Elm=C3=A9n?= Date: Wed, 15 Jul 2026 15:22:44 +0200 Subject: [PATCH 1/5] feat: Linux & macOS support via Wine + .NET 8 artifacts output layout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Run the DevExpress XAF Model Editor (a Windows .NET WinForms app) on Linux and macOS by launching it through Wine, and support the artifacts output layout. Launch: spawn the .exe through `wine` on non-Windows (configurable wineCommand/winePrefix), translate path args to Windows form (Z:\…), and set .NET-under-Wine stability env (pure JIT + workstation GC) — a large XAF model otherwise crashes the CLR (0x80131506). Discovery: auto-detect from a version-scoped XDG dir (~/.local/share/xaf-modeleditor//); resolve the real home when VS Code runs as a Snap (SNAP_REAL_HOME). Fixes #1: locate the output DLL in the .NET 8+ artifacts output layout. Docs: README + docs/linux-wine-setup.md + scripts/setup-wine.sh. Co-Authored-By: Claude Opus 4.8 --- README.md | 17 +++- docs/linux-wine-setup.md | 115 ++++++++++++++++++++++++++ out/extension.js | 119 +++++++++++++++++++++++++-- out/extension.js.map | 2 +- package.json | 16 +++- scripts/setup-wine.sh | 171 +++++++++++++++++++++++++++++++++++++++ src/extension.ts | 109 +++++++++++++++++++++++-- 7 files changed, 531 insertions(+), 18 deletions(-) create mode 100644 docs/linux-wine-setup.md create mode 100755 scripts/setup-wine.sh diff --git a/README.md b/README.md index 52080e4..b2ca461 100644 --- a/README.md +++ b/README.md @@ -6,18 +6,27 @@ This extension integrates the DevExpress XAF Model Editor into Visual Studio Code, enabling seamless editing of `Model.xafml` files with automatic version detection and robust error handling. ## Features -- Detects DevExpress version from your project files +- Detects DevExpress version from your project files (incl. `Directory.Packages.props` central package management) - Launches the correct Model Editor executable for your version - Registers context menu and double-click actions for `Model.xafml` - Automatically builds the solution before launching the Model Editor - Provides user-friendly error messages and troubleshooting links -- Designed for Windows environments +- **Cross-platform: Windows natively, plus Linux and macOS via Wine** ## Requirements -- Windows OS -- DevExpress eXpressApp Framework (XAF) installed + +**Windows** +- DevExpress eXpressApp Framework (XAF) installed (ships the Model Editor) +- .NET SDK (for building the solution) + +**Linux / macOS (via Wine)** +- [Wine](https://www.winehq.org/) (10.0+ recommended) +- A Wine prefix containing the **Windows .NET 9 Desktop Runtime** + **ASP.NET Core Runtime** (the Model Editor is a .NET 9 WinForms app) +- The Model Editor binaries copied from a Windows DevExpress install (see below) - .NET SDK (for building the solution) +See **[docs/linux-wine-setup.md](docs/linux-wine-setup.md)** for a copy‑paste setup (there is a `scripts/setup-wine.sh` that automates it). + ## Usage ### Customizing the Model Editor Path diff --git a/docs/linux-wine-setup.md b/docs/linux-wine-setup.md new file mode 100644 index 0000000..fb8eb1f --- /dev/null +++ b/docs/linux-wine-setup.md @@ -0,0 +1,115 @@ +# Running the XAF Model Editor on Linux & macOS (via Wine) + +The DevExpress XAF Model Editor is a **Windows .NET 9 WinForms** application. It has no +native Linux/macOS build, but it runs well under [Wine](https://www.winehq.org/) once the +Windows .NET runtimes are present. This extension launches it through Wine automatically. + +## TL;DR + +```bash +# 1. Configure Wine + the .NET 9 runtimes (idempotent): +./scripts/setup-wine.sh + +# 2. Copy the Model Editor binaries from a Windows DevExpress install to: +# ~/.local/share/xaf-modeleditor// +# e.g. for 25.2: +# ~/.local/share/xaf-modeleditor/25.2/DevExpress.ExpressApp.ModelEditor.x64.v25.2.exe +``` + +Then in VS Code: right-click a `Model.xafml` → **Open with XAF Model Editor**. + +--- + +## 1. Configure Wine + +Run the helper script — it installs Wine (if missing), creates a dedicated prefix, and +installs the Windows **.NET 9 Desktop Runtime** + **ASP.NET Core Runtime** into it: + +```bash +./scripts/setup-wine.sh +``` + +It is safe to re-run. Override defaults with environment variables: + +| Variable | Default | Purpose | +|---|---|---| +| `WINEPREFIX` | `~/.wine-modeleditor` | Dedicated Wine prefix for the editor | +| `DOTNET_CHANNEL` | `9.0` | .NET runtime channel to install | +| `MODEL_EDITOR_HOME` | `~/.local/share/xaf-modeleditor` | Where version folders live | + +
+What the script does manually (if you prefer to do it by hand) + +```bash +export WINEPREFIX="$HOME/.wine-modeleditor" WINEARCH=win64 +wineboot --init + +# .NET 10 Windows Desktop Runtime (WinForms) + ASP.NET Core Runtime. +# The Model Editor's runtimeconfig uses rollForward=LatestMajor, so it runs on the highest +# installed runtime. Install .NET 10 if your project references .NET 10 packages +# (e.g. Microsoft.Extensions.* 10.x); .NET 9 projects still work (they roll forward). +curl -fsSL https://aka.ms/dotnet/10.0/windowsdesktop-runtime-win-x64.exe -o /tmp/wd.exe +curl -fsSL https://aka.ms/dotnet/10.0/aspnetcore-runtime-win-x64.exe -o /tmp/ac.exe +wine /tmp/wd.exe /install /quiet /norestart +wine /tmp/ac.exe /install /quiet /norestart + +# Verify: +ls "$WINEPREFIX/drive_c/Program Files/dotnet/shared" +# Microsoft.AspNetCore.App Microsoft.NETCore.App Microsoft.WindowsDesktop.App +``` +
+ +## 2. Get the Model Editor binaries + +DevExpress does not ship the editor separately for Linux — copy it from any Windows +machine that has DevExpress installed. On Windows it lives here: + +``` +C:\Program Files\DevExpress 25.2\Components\Tools\eXpressAppFrameworkNetCore\Model Editor +``` + +Copy that **whole folder** (the `.exe` needs the `DevExpress.*.dll` files beside it) to a +**version-scoped** directory on your machine: + +``` +~/.local/share/xaf-modeleditor/25.2/ +├── DevExpress.ExpressApp.ModelEditor.x64.v25.2.exe ← launched by the extension +├── DevExpress.ExpressApp.ModelEditor.v25.2.exe +├── DevExpress.*.dll (~44 files) +└── ... +``` + +The extension detects your project's DevExpress version and looks in +`~/.local/share/xaf-modeleditor//` automatically — mirroring the Windows layout, +so no per-machine path configuration is needed. + +## 3. Use it + +Right-click a `Model.xafml` in the Explorer → **Open with XAF Model Editor**. The extension +builds the solution, then launches the editor through Wine. + +## Configuration (optional) + +Set these in VS Code **Settings** only if you deviate from the defaults: + +| Setting | Default | Notes | +|---|---|---| +| `xafModelEditor.modelEditorPath` | *(auto-detected)* | Absolute path to the `.exe` — skips auto-detection | +| `xafModelEditor.winePrefix` | `~/.wine-modeleditor` | Prefix that holds the .NET runtimes | +| `xafModelEditor.wineCommand` | `wine` | Set to e.g. `/usr/bin/wine` if `wine` is not on PATH | + +## Troubleshooting + +- **"Model Editor executable not found" pointing at `~/snap/code//…`** + VS Code installed as a **Snap** confines `HOME`. The extension resolves your real home + automatically (via `SNAP_REAL_HOME`); make sure the binaries are under your *real* + `~/.local/share/xaf-modeleditor//`, not the snap sandbox. (Upgrade to ≥ 0.0.22.) +- **`wine: command not found` when launched from a Snap VS Code** + Set `"xafModelEditor.wineCommand": "/usr/bin/wine"` (absolute path). +- **A window never appears** + Confirm the runtimes installed: `ls "$WINEPREFIX/drive_c/Program Files/dotnet/shared"`. + Check the **Output → XAF Model Editor** panel for the exact command and Wine errors. +- **macOS (Apple Silicon)** + Wine needs Rosetta 2 (`softwareupdate --install-rosetta`) and an x86‑64 Wine build. + Otherwise identical to Linux. +- **Fonts/skinning look rough** — cosmetic only under Wine; the editor is fully functional. diff --git a/out/extension.js b/out/extension.js index dce0152..ce3e8ef 100644 --- a/out/extension.js +++ b/out/extension.js @@ -38,8 +38,34 @@ exports.deactivate = deactivate; const modelTree_1 = require("./modelTree"); const vscode = __importStar(require("vscode")); const fs = __importStar(require("fs")); +const os = __importStar(require("os")); const path = __importStar(require("path")); const child_process_1 = require("child_process"); +// The Model Editor is a Windows-only WinForms .exe. On Linux/macOS we launch it +// through Wine, which maps the Unix root at the Z: drive — so absolute Unix paths +// passed as arguments must be converted to Windows form (Z:\foo\bar). +const isWindows = process.platform === 'win32'; +function toWinePath(p) { + return 'Z:' + path.resolve(p).replace(/\//g, '\\'); +} +// VS Code installed as a Snap confines HOME/XDG to ~/snap/code//…, so os.homedir() +// points into the sandbox rather than the user's real home. Resolve the real home so the +// Model Editor binaries and Wine prefix are found at their conventional locations. +function userHome() { + if (process.env.SNAP_REAL_HOME) { + return process.env.SNAP_REAL_HOME; + } + const home = os.homedir(); + const snapMatch = home.match(/^(.*)\/snap\/[^/]+\/[^/]+\/?$/); + return snapMatch ? snapMatch[1] : home; +} +function userDataHome() { + // Ignore a snap-redirected XDG_DATA_HOME; anchor on the real home. + if (!process.env.SNAP && process.env.XDG_DATA_HOME) { + return process.env.XDG_DATA_HOME; + } + return path.join(userHome(), '.local', 'share'); +} // Output channel for extension logs const outputChannel = vscode.window.createOutputChannel('XAF Model Editor'); // Optional: log to file (uncomment if needed) @@ -96,11 +122,22 @@ function activate(context) { exePath = exePath.trim(); log('Using user-configured Model Editor path: ' + exePath); } - else { + else if (isWindows) { const modelEditorDir = `C:/Program Files/DevExpress ${versionShort}/Components/Tools/eXpressAppFrameworkNetCore/Model Editor/`; const exeName = `DevExpress.ExpressApp.ModelEditor.v${versionShort}.exe`; exePath = path.join(modelEditorDir, exeName); - log('Model Editor exe path (auto-detected): ' + exePath); + log('Model Editor exe path (auto-detected, Windows): ' + exePath); + } + else { + // Linux/macOS default: XDG data dir, version-scoped (mirrors the Windows Program Files + // layout). Drop the version's Model Editor folder here and it is found automatically: + // ~/.local/share/xaf-modeleditor//DevExpress.ExpressApp.ModelEditor.x64.v.exe + const dataHome = userDataHome(); + const modelEditorDir = path.join(dataHome, 'xaf-modeleditor', versionShort); + const x64 = path.join(modelEditorDir, `DevExpress.ExpressApp.ModelEditor.x64.v${versionShort}.exe`); + const anyCpu = path.join(modelEditorDir, `DevExpress.ExpressApp.ModelEditor.v${versionShort}.exe`); + exePath = fs.existsSync(x64) ? x64 : anyCpu; + log('Model Editor exe path (auto-detected, Wine): ' + exePath); } if (!fs.existsSync(exePath)) { vscode.window.showErrorMessage(`Model Editor executable not found: ${exePath}\nDownload the correct version from DevExpress or set a custom path in settings.`, 'Download').then(selection => { @@ -161,7 +198,31 @@ function activate(context) { log('Launching Model Editor with args: ' + JSON.stringify(args)); let modelEditorProc = undefined; try { - modelEditorProc = (0, child_process_1.spawn)(exePath, args, { detached: true, stdio: 'ignore' }); + if (isWindows) { + modelEditorProc = (0, child_process_1.spawn)(exePath, args, { detached: true, stdio: 'ignore' }); + } + else { + // Linux/macOS: run the Windows .exe through Wine. The .exe path can stay Unix-style + // (Wine resolves it), but path arguments handed to the .NET app must be Windows form. + const wineCommand = (config.get('wineCommand') || '').trim() || 'wine'; + const winePrefix = (config.get('winePrefix') || '').trim() + || path.join(userHome(), '.wine-modeleditor'); + const wineArgs = [exePath, ...args.map(a => (path.isAbsolute(a) ? toWinePath(a) : a))]; + const env = { + ...process.env, + WINEPREFIX: winePrefix, + WINEDEBUG: process.env.WINEDEBUG || '-all', + // .NET-under-Wine stability. Loading a large XAF model otherwise crashes the CLR + // with an ExecutionEngineException (0x80131506) at the end of model build. Forcing + // pure JIT (no tiered/R2R) and the workstation GC keeps Wine's runtime stable. + DOTNET_TieredCompilation: process.env.DOTNET_TieredCompilation || '0', + DOTNET_TieredPGO: process.env.DOTNET_TieredPGO || '0', + DOTNET_ReadyToRun: process.env.DOTNET_ReadyToRun || '0', + DOTNET_gcServer: process.env.DOTNET_gcServer || '0', + }; + log(`Launching via Wine: ${wineCommand} (WINEPREFIX=${winePrefix}) args=${JSON.stringify(wineArgs)}`); + modelEditorProc = (0, child_process_1.spawn)(wineCommand, wineArgs, { detached: true, stdio: 'ignore', env }); + } } catch (spawnErr) { log('ERROR: Failed to spawn Model Editor process: ' + (spawnErr?.message || spawnErr)); @@ -338,6 +399,49 @@ async function buildSolution(solutionFile) { /** * Determines the correct arguments for Model Editor based on project type. */ +/** + * Locates the project's output DLL in the .NET 8+ "artifacts output layout" + * (https://learn.microsoft.com/dotnet/core/sdk/artifacts-output), where bin/obj move out of each + * project into /artifacts/. Layout: artifacts/bin///.dll + * where is e.g. "debug", "release", or "debug_net9.0" for multi-targeted projects. + */ +function findDllInArtifactsLayout(projectFile) { + const projectName = path.basename(projectFile, path.extname(projectFile)); + let dir = path.dirname(projectFile); + while (dir && dir.length > 2) { + const artifactsBin = path.join(dir, 'artifacts', 'bin'); + if (fs.existsSync(artifactsBin)) { + const projectBin = path.join(artifactsBin, projectName); + if (fs.existsSync(projectBin)) { + let pivots = []; + try { + pivots = fs.readdirSync(projectBin) + .filter(p => { try { + return fs.statSync(path.join(projectBin, p)).isDirectory(); + } + catch { + return false; + } }); + } + catch { /* ignore */ } + // Prefer a Debug build when several pivots exist. + pivots.sort((a, b) => (a.toLowerCase().startsWith('debug') ? -1 : 0) - (b.toLowerCase().startsWith('debug') ? -1 : 0)); + for (const pivot of pivots) { + const candidate = path.join(projectBin, pivot, `${projectName}.dll`); + if (fs.existsSync(candidate)) { + return candidate; + } + } + } + return undefined; // artifacts root found, but no matching DLL — don't keep walking up + } + if (fs.existsSync(path.join(dir, '.git'))) { + break; + } // stop at the repo root + dir = path.dirname(dir); + } + return undefined; +} async function getModelEditorArgs(projectFile, xafmlUri) { const dir = path.dirname(projectFile); log(`[getModelEditorArgs] Project dir: ${dir}`); @@ -391,9 +495,14 @@ async function getModelEditorArgs(projectFile, xafmlUri) { log(`[getModelEditorArgs] Found DLL: ${dll} (config: ${foundConfig}, target: ${foundTarget})`); return [dll, dir]; } - else { - log('[getModelEditorArgs] No DLL found in any bin//net*/ folder. Fallback to .exe scenario.'); + // Not found in the per-project bin — try the .NET 8+ artifacts output layout, where every + // project's output lives under /artifacts/bin//[_]/. + const artifactsDll = findDllInArtifactsLayout(projectFile); + if (artifactsDll) { + log(`[getModelEditorArgs] Found DLL in artifacts output layout: ${artifactsDll}`); + return [artifactsDll, dir]; } + log('[getModelEditorArgs] No DLL found in per-project bin or artifacts layout. Fallback to .exe scenario.'); // Otherwise, fallback to .exe.config and .exe (Win scenario) log('[getModelEditorArgs] Fallback: searching for .exe and .config in ' + dir); const exe = fs.readdirSync(dir).find(f => f.endsWith('.exe')); diff --git a/out/extension.js.map b/out/extension.js.map index eaa99b2..ded5f53 100644 --- a/out/extension.js.map +++ b/out/extension.js.map @@ -1 +1 @@ -{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 69d923e..7ec2566 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "xaf-modeleditor", "displayName": "XAF Model Editor Integration", "description": "Integrates DevExpress XAF Model Editor with VS Code. Right-click or double-click Model.xafml to build and launch the correct Model Editor version.", - "version": "0.0.20", + "version": "0.0.24", "publisher": "DvisiousNeed2CodeAB", "engines": { "vscode": ">=1.70.0" @@ -60,10 +60,20 @@ "type": "object", "title": "XAF Model Editor", "properties": { - "modelEditorPath": { + "xafModelEditor.modelEditorPath": { "type": "string", "default": "", - "description": "Optional: Override the default path to the DevExpress Model Editor executable. If set, this path will be used instead of the auto-detected one. Example: D:/DevExpress/Tools/ModelEditor/DevExpress.ExpressApp.ModelEditor.v24.2.exe" + "description": "Optional: Override the path to the DevExpress Model Editor executable. On Linux/macOS this is required — point it at the Windows Model Editor .exe (it is launched via Wine). Example (Windows): D:/DevExpress/Tools/ModelEditor/DevExpress.ExpressApp.ModelEditor.v24.2.exe — Example (Linux): /home/me/source/Model Editor/DevExpress.ExpressApp.ModelEditor.x64.v25.2.exe" + }, + "xafModelEditor.wineCommand": { + "type": "string", + "default": "wine", + "description": "Non-Windows only: the Wine command used to run the Windows Model Editor .exe (e.g. 'wine' or 'wine64')." + }, + "xafModelEditor.winePrefix": { + "type": "string", + "default": "", + "description": "Non-Windows only: WINEPREFIX for the Model Editor. Must contain the Windows .NET 9 Desktop + ASP.NET Core runtimes. Defaults to ~/.wine-modeleditor when empty." } } } diff --git a/scripts/setup-wine.sh b/scripts/setup-wine.sh new file mode 100755 index 0000000..eb47039 --- /dev/null +++ b/scripts/setup-wine.sh @@ -0,0 +1,171 @@ +#!/usr/bin/env bash +# +# setup-wine.sh — configure Wine so the DevExpress XAF Model Editor (a Windows +# .NET 9 WinForms app) can run on Linux and macOS, driven by the +# "XAF Model Editor Integration" VS Code extension. +# +# What it does (idempotent — safe to re-run): +# 1. Ensures Wine is installed (apt/dnf/pacman/zypper on Linux, Homebrew on macOS). +# 2. Creates a dedicated Wine prefix (default: ~/.wine-modeleditor). +# 3. Installs the Windows .NET 9 Desktop Runtime + ASP.NET Core Runtime into it. +# 4. Prints where to drop the Model Editor binaries so the extension finds them. +# +# Config via environment variables: +# WINEPREFIX Wine prefix to use (default: ~/.wine-modeleditor) +# DOTNET_CHANNEL .NET runtime channel (default: 9.0) +# MODEL_EDITOR_HOME where Model Editor versions live +# (default: ${XDG_DATA_HOME:-~/.local/share}/xaf-modeleditor) +# +# Usage: +# ./scripts/setup-wine.sh +# +set -euo pipefail + +# ---------------------------------------------------------------------------- # +# Config +# ---------------------------------------------------------------------------- # +WINEPREFIX="${WINEPREFIX:-$HOME/.wine-modeleditor}" +# .NET 10 by default: the Model Editor's runtimeconfig uses rollForward=LatestMajor, so the +# highest installed runtime is used. Projects that reference .NET 10 packages (e.g. +# Microsoft.Extensions.* 10.x) need it; projects on 9.x still work (they roll forward). +# Re-run with DOTNET_CHANNEL=9.0 to also install the .NET 9 runtime alongside. +DOTNET_CHANNEL="${DOTNET_CHANNEL:-10.0}" +MODEL_EDITOR_HOME="${MODEL_EDITOR_HOME:-${XDG_DATA_HOME:-$HOME/.local/share}/xaf-modeleditor}" +export WINEPREFIX +export WINEARCH="win64" +export WINEDEBUG="${WINEDEBUG:--all}" + +DL_DIR="$(mktemp -d)" +trap 'rm -rf "$DL_DIR"' EXIT + +info() { printf '\033[1;34m▶ %s\033[0m\n' "$*"; } +ok() { printf '\033[1;32m✓ %s\033[0m\n' "$*"; } +warn() { printf '\033[1;33m! %s\033[0m\n' "$*"; } +die() { printf '\033[1;31m✗ %s\033[0m\n' "$*" >&2; exit 1; } + +# ---------------------------------------------------------------------------- # +# 1. Install Wine +# ---------------------------------------------------------------------------- # +install_wine() { + if command -v wine >/dev/null 2>&1; then + ok "Wine already installed ($(wine --version 2>/dev/null | head -1))" + return + fi + info "Installing Wine…" + local os; os="$(uname -s)" + case "$os" in + Linux) + if command -v apt-get >/dev/null 2>&1; then + sudo dpkg --add-architecture i386 2>/dev/null || true + sudo apt-get update -qq + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y wine wine64 || \ + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y wine + elif command -v dnf >/dev/null 2>&1; then + sudo dnf install -y wine + elif command -v pacman >/dev/null 2>&1; then + sudo pacman -Sy --noconfirm wine + elif command -v zypper >/dev/null 2>&1; then + sudo zypper install -y wine + else + die "No supported package manager found. Install Wine manually: https://wiki.winehq.org/Download" + fi + ;; + Darwin) + if command -v brew >/dev/null 2>&1; then + brew install --cask --no-quarantine wine-stable || brew install --cask wine-stable + else + die "Homebrew not found. Install it (https://brew.sh) then: brew install --cask wine-stable" + fi + ;; + *) die "Unsupported OS: $os" ;; + esac + command -v wine >/dev/null 2>&1 || die "Wine installation did not succeed." + ok "Wine installed ($(wine --version 2>/dev/null | head -1))" +} + +# ---------------------------------------------------------------------------- # +# 2. Initialize the Wine prefix +# ---------------------------------------------------------------------------- # +init_prefix() { + info "Initializing Wine prefix at $WINEPREFIX…" + mkdir -p "$WINEPREFIX" + wineboot --init >/dev/null 2>&1 || true + # Give wineserver a moment to settle. + wineserver -w 2>/dev/null || sleep 3 + ok "Wine prefix ready." +} + +# ---------------------------------------------------------------------------- # +# 3. Install the Windows .NET runtimes into the prefix +# ---------------------------------------------------------------------------- # +runtime_present() { + # $1 = shared framework name (e.g. Microsoft.WindowsDesktop.App) + local base="$WINEPREFIX/drive_c/Program Files/dotnet/shared/$1" + [ -d "$base" ] && ls "$base" 2>/dev/null | grep -q "^${DOTNET_CHANNEL}\." +} + +install_runtime() { + # $1 = friendly name, $2 = aka.ms component, $3 = shared framework dir to verify + local name="$1" component="$2" verify="$3" + if runtime_present "$verify"; then + ok "$name ($DOTNET_CHANNEL) already installed in prefix." + return + fi + info "Downloading + installing $name ($DOTNET_CHANNEL)…" + local url="https://aka.ms/dotnet/${DOTNET_CHANNEL}/${component}-win-x64.exe" + local exe="$DL_DIR/${component}.exe" + curl -fsSL "$url" -o "$exe" || die "Download failed: $url" + wine "$exe" /install /quiet /norestart >/dev/null 2>&1 || true + runtime_present "$verify" || warn "Could not verify $name in the prefix — the Model Editor may still work; check manually." + ok "$name installed." +} + +install_runtimes() { + # WindowsDesktop runtime brings NETCore.App + WindowsDesktop.App; ASP.NET Core brings AspNetCore.App. + install_runtime "Windows Desktop Runtime" "windowsdesktop-runtime" "Microsoft.WindowsDesktop.App" + install_runtime "ASP.NET Core Runtime" "aspnetcore-runtime" "Microsoft.AspNetCore.App" +} + +# ---------------------------------------------------------------------------- # +# 4. Guidance for the Model Editor binaries +# ---------------------------------------------------------------------------- # +print_next_steps() { + cat </ + +For DevExpress 25.2 that is: + + $MODEL_EDITOR_HOME/25.2/DevExpress.ExpressApp.ModelEditor.x64.v25.2.exe + (+ the DevExpress *.dll files that ship alongside it) + +Copy the whole "Model Editor" folder from a Windows DevExpress install: + + C:\\Program Files\\DevExpress 25.2\\Components\\Tools\\eXpressAppFrameworkNetCore\\Model Editor + +Then in VS Code just right-click a Model.xafml → "Open with XAF Model Editor". +The extension auto-detects the version and launches the .exe through Wine +(prefix: $WINEPREFIX). + +Optional VS Code settings (only if you deviate from the defaults): + "xafModelEditor.modelEditorPath": "/abs/path/to/....ModelEditor.x64.v25.2.exe" + "xafModelEditor.winePrefix": "$WINEPREFIX" + "xafModelEditor.wineCommand": "wine" +EOF +} + +# ---------------------------------------------------------------------------- # +main() { + info "XAF Model Editor — Wine setup" + install_wine + init_prefix + install_runtimes + mkdir -p "$MODEL_EDITOR_HOME" + print_next_steps +} +main "$@" diff --git a/src/extension.ts b/src/extension.ts index 2c3b588..1519b87 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,9 +1,35 @@ import { XafModelTreeProvider } from './modelTree'; import * as vscode from 'vscode'; import * as fs from 'fs'; +import * as os from 'os'; import * as path from 'path'; import { spawn } from 'child_process'; +// The Model Editor is a Windows-only WinForms .exe. On Linux/macOS we launch it +// through Wine, which maps the Unix root at the Z: drive — so absolute Unix paths +// passed as arguments must be converted to Windows form (Z:\foo\bar). +const isWindows = process.platform === 'win32'; + +function toWinePath(p: string): string { + return 'Z:' + path.resolve(p).replace(/\//g, '\\'); +} + +// VS Code installed as a Snap confines HOME/XDG to ~/snap/code//…, so os.homedir() +// points into the sandbox rather than the user's real home. Resolve the real home so the +// Model Editor binaries and Wine prefix are found at their conventional locations. +function userHome(): string { + if (process.env.SNAP_REAL_HOME) { return process.env.SNAP_REAL_HOME; } + const home = os.homedir(); + const snapMatch = home.match(/^(.*)\/snap\/[^/]+\/[^/]+\/?$/); + return snapMatch ? snapMatch[1] : home; +} + +function userDataHome(): string { + // Ignore a snap-redirected XDG_DATA_HOME; anchor on the real home. + if (!process.env.SNAP && process.env.XDG_DATA_HOME) { return process.env.XDG_DATA_HOME; } + return path.join(userHome(), '.local', 'share'); +} + // Output channel for extension logs const outputChannel = vscode.window.createOutputChannel('XAF Model Editor'); @@ -63,11 +89,21 @@ export function activate(context: vscode.ExtensionContext) { if (exePath && exePath.trim().length > 0) { exePath = exePath.trim(); log('Using user-configured Model Editor path: ' + exePath); - } else { + } else if (isWindows) { const modelEditorDir = `C:/Program Files/DevExpress ${versionShort}/Components/Tools/eXpressAppFrameworkNetCore/Model Editor/`; const exeName = `DevExpress.ExpressApp.ModelEditor.v${versionShort}.exe`; exePath = path.join(modelEditorDir, exeName); - log('Model Editor exe path (auto-detected): ' + exePath); + log('Model Editor exe path (auto-detected, Windows): ' + exePath); + } else { + // Linux/macOS default: XDG data dir, version-scoped (mirrors the Windows Program Files + // layout). Drop the version's Model Editor folder here and it is found automatically: + // ~/.local/share/xaf-modeleditor//DevExpress.ExpressApp.ModelEditor.x64.v.exe + const dataHome = userDataHome(); + const modelEditorDir = path.join(dataHome, 'xaf-modeleditor', versionShort); + const x64 = path.join(modelEditorDir, `DevExpress.ExpressApp.ModelEditor.x64.v${versionShort}.exe`); + const anyCpu = path.join(modelEditorDir, `DevExpress.ExpressApp.ModelEditor.v${versionShort}.exe`); + exePath = fs.existsSync(x64) ? x64 : anyCpu; + log('Model Editor exe path (auto-detected, Wine): ' + exePath); } if (!fs.existsSync(exePath)) { vscode.window.showErrorMessage( @@ -130,7 +166,30 @@ export function activate(context: vscode.ExtensionContext) { log('Launching Model Editor with args: ' + JSON.stringify(args)); let modelEditorProc: any = undefined; try { - modelEditorProc = spawn(exePath, args, { detached: true, stdio: 'ignore' }); + if (isWindows) { + modelEditorProc = spawn(exePath, args, { detached: true, stdio: 'ignore' }); + } else { + // Linux/macOS: run the Windows .exe through Wine. The .exe path can stay Unix-style + // (Wine resolves it), but path arguments handed to the .NET app must be Windows form. + const wineCommand = (config.get('wineCommand') || '').trim() || 'wine'; + const winePrefix = (config.get('winePrefix') || '').trim() + || path.join(userHome(), '.wine-modeleditor'); + const wineArgs = [exePath, ...args.map(a => (path.isAbsolute(a) ? toWinePath(a) : a))]; + const env = { + ...process.env, + WINEPREFIX: winePrefix, + WINEDEBUG: process.env.WINEDEBUG || '-all', + // .NET-under-Wine stability. Loading a large XAF model otherwise crashes the CLR + // with an ExecutionEngineException (0x80131506) at the end of model build. Forcing + // pure JIT (no tiered/R2R) and the workstation GC keeps Wine's runtime stable. + DOTNET_TieredCompilation: process.env.DOTNET_TieredCompilation || '0', + DOTNET_TieredPGO: process.env.DOTNET_TieredPGO || '0', + DOTNET_ReadyToRun: process.env.DOTNET_ReadyToRun || '0', + DOTNET_gcServer: process.env.DOTNET_gcServer || '0', + }; + log(`Launching via Wine: ${wineCommand} (WINEPREFIX=${winePrefix}) args=${JSON.stringify(wineArgs)}`); + modelEditorProc = spawn(wineCommand, wineArgs, { detached: true, stdio: 'ignore', env }); + } } catch (spawnErr: any) { log('ERROR: Failed to spawn Model Editor process: ' + (spawnErr?.message || spawnErr)); vscode.window.showErrorMessage('Failed to start Model Editor: ' + (spawnErr?.message || spawnErr)); @@ -309,6 +368,40 @@ async function buildSolution(solutionFile: string): Promise { /** * Determines the correct arguments for Model Editor based on project type. */ +/** + * Locates the project's output DLL in the .NET 8+ "artifacts output layout" + * (https://learn.microsoft.com/dotnet/core/sdk/artifacts-output), where bin/obj move out of each + * project into /artifacts/. Layout: artifacts/bin///.dll + * where is e.g. "debug", "release", or "debug_net9.0" for multi-targeted projects. + */ +function findDllInArtifactsLayout(projectFile: string): string | undefined { + const projectName = path.basename(projectFile, path.extname(projectFile)); + let dir = path.dirname(projectFile); + while (dir && dir.length > 2) { + const artifactsBin = path.join(dir, 'artifacts', 'bin'); + if (fs.existsSync(artifactsBin)) { + const projectBin = path.join(artifactsBin, projectName); + if (fs.existsSync(projectBin)) { + let pivots: string[] = []; + try { + pivots = fs.readdirSync(projectBin) + .filter(p => { try { return fs.statSync(path.join(projectBin, p)).isDirectory(); } catch { return false; } }); + } catch { /* ignore */ } + // Prefer a Debug build when several pivots exist. + pivots.sort((a, b) => (a.toLowerCase().startsWith('debug') ? -1 : 0) - (b.toLowerCase().startsWith('debug') ? -1 : 0)); + for (const pivot of pivots) { + const candidate = path.join(projectBin, pivot, `${projectName}.dll`); + if (fs.existsSync(candidate)) { return candidate; } + } + } + return undefined; // artifacts root found, but no matching DLL — don't keep walking up + } + if (fs.existsSync(path.join(dir, '.git'))) { break; } // stop at the repo root + dir = path.dirname(dir); + } + return undefined; +} + async function getModelEditorArgs(projectFile: string, xafmlUri: vscode.Uri): Promise { const dir = path.dirname(projectFile); log(`[getModelEditorArgs] Project dir: ${dir}`); @@ -358,9 +451,15 @@ async function getModelEditorArgs(projectFile: string, xafmlUri: vscode.Uri): Pr if (binDir && dll) { log(`[getModelEditorArgs] Found DLL: ${dll} (config: ${foundConfig}, target: ${foundTarget})`); return [dll, dir]; - } else { - log('[getModelEditorArgs] No DLL found in any bin//net*/ folder. Fallback to .exe scenario.'); } + // Not found in the per-project bin — try the .NET 8+ artifacts output layout, where every + // project's output lives under /artifacts/bin//[_]/. + const artifactsDll = findDllInArtifactsLayout(projectFile); + if (artifactsDll) { + log(`[getModelEditorArgs] Found DLL in artifacts output layout: ${artifactsDll}`); + return [artifactsDll, dir]; + } + log('[getModelEditorArgs] No DLL found in per-project bin or artifacts layout. Fallback to .exe scenario.'); // Otherwise, fallback to .exe.config and .exe (Win scenario) log('[getModelEditorArgs] Fallback: searching for .exe and .config in ' + dir); const exe = fs.readdirSync(dir).find(f => f.endsWith('.exe')); From 4e04e0a8679f979737f97f07241a594ddf550069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Elm=C3=A9n?= Date: Wed, 15 Jul 2026 15:37:52 +0200 Subject: [PATCH 2/5] docs: rewrite README (fix project-tree block, richer install/setup, 2026) - Fix the mangled project-structure tree (now a fenced code block). - Expand installation & setup: per-platform Model Editor prep (Windows + Linux/macOS Wine), the new winePrefix/wineCommand settings, and a settings table. - Refresh examples to 25.2, document the artifacts-layout + CI/CD publish flow. - Bump copyright year to 2026 (README + LICENSE). Co-Authored-By: Claude Opus 4.8 --- LICENSE | 2 +- README.md | 261 ++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 165 insertions(+), 98 deletions(-) diff --git a/LICENSE b/LICENSE index 6c37101..ec2227c 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 Need2Code AB +Copyright (c) 2026 Need2Code AB Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index b2ca461..c47d87b 100644 --- a/README.md +++ b/README.md @@ -1,140 +1,207 @@ -# XAF Model Editor VS Code Extension +# XAF Model Editor Integration for VS Code [![Build and Publish](https://github.com/Need2Code-AB/vscode.extensions.xaf.modeleditor/actions/workflows/build-and-publish.yml/badge.svg)](https://github.com/Need2Code-AB/vscode.extensions.xaf.modeleditor/actions/workflows/build-and-publish.yml) [![VS Code Marketplace](https://img.shields.io/visual-studio-marketplace/v/DvisiousNeed2CodeAB.xaf-modeleditor)](https://marketplace.visualstudio.com/items?itemName=DvisiousNeed2CodeAB.xaf-modeleditor) -This extension integrates the DevExpress XAF Model Editor into Visual Studio Code, enabling seamless editing of `Model.xafml` files with automatic version detection and robust error handling. +Open the **DevExpress XAF Model Editor** straight from Visual Studio Code. Right-click a +`Model.xafml` file and the extension detects your DevExpress version, builds the solution, +and launches the matching Model Editor — on **Windows natively, and on Linux & macOS through +Wine**. + +--- ## Features -- Detects DevExpress version from your project files (incl. `Directory.Packages.props` central package management) -- Launches the correct Model Editor executable for your version -- Registers context menu and double-click actions for `Model.xafml` -- Automatically builds the solution before launching the Model Editor -- Provides user-friendly error messages and troubleshooting links -- **Cross-platform: Windows natively, plus Linux and macOS via Wine** -## Requirements +- **Automatic version detection** — reads the DevExpress version from your project, including + `Directory.Packages.props` (central package management). +- **Launches the right editor** for that version, building the solution first. +- **Context-menu & tree integration** for `Model.xafml` files. +- **Cross-platform** — Windows natively; Linux and macOS via Wine. +- **Flexible output discovery** — classic per-project `bin/` *and* the + [.NET 8+ artifacts output layout](https://learn.microsoft.com/dotnet/core/sdk/artifacts-output). +- **Clear diagnostics** — every step is logged to the **Output → XAF Model Editor** panel. + +## Supported platforms + +| Platform | How it runs | Extra setup | +|---|---|---| +| **Windows** | Native (`.exe` launched directly) | DevExpress installed | +| **Linux** | Windows `.exe` via **Wine** | Wine + .NET runtimes + editor binaries | +| **macOS** | Windows `.exe` via **Wine** | Wine (+ Rosetta 2 on Apple Silicon) + runtimes + binaries | + +--- + +## Installation & setup + +### 1. Install the extension + +- **From the Marketplace:** search for **“XAF Model Editor Integration”** in the Extensions + view, or install + [DvisiousNeed2CodeAB.xaf-modeleditor](https://marketplace.visualstudio.com/items?itemName=DvisiousNeed2CodeAB.xaf-modeleditor). +- **From a `.vsix`:** `code --install-extension xaf-modeleditor-.vsix`. + +You also need the **.NET SDK** installed (the extension builds your solution before opening +the editor). + +### 2. Prepare the Model Editor + +The Model Editor itself is **not** bundled with the extension — it ships with DevExpress. How +you provide it depends on your OS. + +#### Windows -**Windows** -- DevExpress eXpressApp Framework (XAF) installed (ships the Model Editor) -- .NET SDK (for building the solution) +Install DevExpress and you are done — the editor lives at its standard location and is +auto-detected: -**Linux / macOS (via Wine)** -- [Wine](https://www.winehq.org/) (10.0+ recommended) -- A Wine prefix containing the **Windows .NET 9 Desktop Runtime** + **ASP.NET Core Runtime** (the Model Editor is a .NET 9 WinForms app) -- The Model Editor binaries copied from a Windows DevExpress install (see below) -- .NET SDK (for building the solution) +``` +C:\Program Files\DevExpress 25.2\Components\Tools\eXpressAppFrameworkNetCore\Model Editor\ +``` + +If DevExpress is on another drive or a custom path, point the extension at the executable via +the `xafModelEditor.modelEditorPath` setting (see [Configuration](#configuration)). -See **[docs/linux-wine-setup.md](docs/linux-wine-setup.md)** for a copy‑paste setup (there is a `scripts/setup-wine.sh` that automates it). +#### Linux & macOS (via Wine) + +The Model Editor is a Windows .NET WinForms application, so it runs through +[Wine](https://www.winehq.org/). Two one-time steps: + +**a) Configure Wine + the .NET runtimes** — run the helper script (installs Wine if missing, +creates a dedicated prefix, and installs the Windows .NET Desktop + ASP.NET Core runtimes): + +```bash +./scripts/setup-wine.sh +``` + +**b) Copy the Model Editor binaries** from any Windows machine with DevExpress installed (the +folder shown above) into a **version-scoped** directory — this mirrors the Windows layout so +the extension finds it automatically: + +``` +~/.local/share/xaf-modeleditor/25.2/ +├── DevExpress.ExpressApp.ModelEditor.x64.v25.2.exe ← launched by the extension +├── DevExpress.*.dll (~44 DevExpress assemblies) +└── ... +``` + +Full walkthrough, manual steps, and troubleshooting: +**[docs/linux-wine-setup.md](docs/linux-wine-setup.md)**. + +### 3. Verify + +Right-click any `Model.xafml` → **Open with XAF Model Editor**. The first launch takes a few +seconds (it builds the solution). Watch **Output → XAF Model Editor** if anything is off. + +--- ## Usage -### Customizing the Model Editor Path +1. **Right-click** a `Model.xafml` file in the Explorer (or use the **XAF Model Files** view). +2. Choose **Open with XAF Model Editor**. -If you have installed DevExpress on a different drive or custom location, you can override the default Model Editor path: + ![Open with XAF Model Editor](docs/context-menu.png) -1. Open **VS Code Settings** (File > Preferences > Settings). -2. Search for `XAF Model Editor` or `xafModelEditor.modelEditorPath`. -3. Enter the full path to your Model Editor executable, e.g.: +3. The extension builds the solution and launches the editor for your DevExpress version. - `D:/DevExpress/Tools/ModelEditor/DevExpress.ExpressApp.ModelEditor.v24.2.exe` +## Configuration -If this setting is provided, the extension will use your custom path instead of the auto-detected one. +Settings live under **XAF Model Editor** (`Ctrl+,` → search `xafModelEditor`): -### How to open Model.xafml with XAF Model Editor +| Setting | Default | Description | +|---|---|---| +| `xafModelEditor.modelEditorPath` | *(auto-detected)* | Absolute path to the Model Editor `.exe`. On Linux/macOS this points at the Windows `.exe` that is launched via Wine. Overrides auto-detection. | +| `xafModelEditor.winePrefix` | `~/.wine-modeleditor` | *(Non-Windows)* Wine prefix holding the Windows .NET runtimes. | +| `xafModelEditor.wineCommand` | `wine` | *(Non-Windows)* Wine executable — set to e.g. `/usr/bin/wine` if `wine` is not on `PATH`. | -1. **Right-click** on a `Model.xafml` file in your XAF project. -2. Select **Open with XAF Model Editor** from the context menu: +Example (Windows): - ![Open with XAF Model Editor](docs/context-menu.png) +```jsonc +"xafModelEditor.modelEditorPath": "D:/DevExpress/Tools/ModelEditor/DevExpress.ExpressApp.ModelEditor.v25.2.exe" +``` -3. The extension will build your solution and launch the correct Model Editor. -4. If the Model Editor executable is missing, a helpful message and download link will be shown. +--- ## Troubleshooting -- Ensure DevExpress is installed and the version matches your project. -- If the Model Editor cannot be found, download it from: https://www.devexpress.com/ClientCenter/DownloadManager/ -- For issues, check the Output panel in VS Code for detailed logs. - -## Contributing -Contributions are welcome! Please follow best practices for VS Code extension development and ensure all code is robust, well-documented, and maintainable. - - tree -├── .github/ -│ └── workflows/ -│ └── build-and-publish.yml # GitHub Actions workflow -├── .vscode/ -│ └── settings.json # VS Code workspace settings + +- **Version mismatch / editor not found** — make sure the Model Editor for *your* DevExpress + version is installed (Windows) or present under `~/.local/share/xaf-modeleditor//` + (Linux/macOS). Missing on Windows? Download it from the + [DevExpress Download Manager](https://www.devexpress.com/ClientCenter/DownloadManager/). +- **Nothing happens / build fails** — open **Output → XAF Model Editor**; it logs the exact + executable, arguments, and any build errors. +- **Linux/macOS specifics** (path points inside `~/snap/...`, `wine: command not found`, CLR + crash on model load, …) — see the troubleshooting section in + [docs/linux-wine-setup.md](docs/linux-wine-setup.md). + +--- + +## Project structure + +```text +. +├── .github/workflows/ +│ └── build-and-publish.yml # CI: build, package, publish to the Marketplace ├── src/ -│ ├── extension.ts # Main extension logic -│ └── modelTree.ts # Tree view provider for grouped .xafml files +│ ├── extension.ts # Main extension logic (detect version, build, launch) +│ └── modelTree.ts # "XAF Model Files" tree view provider ├── resources/ -│ └── xaf.svg # Extension icon +│ └── xaf.svg # Activity-bar / extension icon +├── scripts/ +│ └── setup-wine.sh # Linux/macOS: configure Wine + .NET runtimes ├── docs/ -│ ├── context-menu.png # Documentation screenshot -│ └── PUBLISHING.md # Publishing and CI/CD guide -├── build-vsix.ps1 # PowerShell build script -├── package.json # Extension manifest and configuration -├── README.md # This file -└── ... +│ ├── context-menu.png # Screenshot used in this README +│ ├── linux-wine-setup.md # Wine setup guide +│ └── PUBLISHING.md # Publishing & CI/CD guide +├── build-vsix.ps1 # PowerShell build helper +├── package.json # Extension manifest & settings +└── README.md +``` -## Development and Building +## Development & building -### Prerequisites -- Node.js (v16 or later) -- npm -- TypeScript -- Visual Studio Code +**Prerequisites:** Node.js 18+, npm, TypeScript, VS Code. -### Building Locally ```bash -# Install dependencies -npm install - -# Compile TypeScript -npm run compile - -# Package extension -npm run package - -# Watch for changes during development -npm run watch +npm install # install dependencies +npm run compile # compile TypeScript -> out/ +npm run package # produce a .vsix +npm run watch # rebuild on change during development ``` -### PowerShell Build Script +Or use the PowerShell helper (compiles, packages, bumps the version): + ```powershell -# Builds, compiles, and packages the extension with version bump .\build-vsix.ps1 ``` -### Automated CI/CD -The extension uses GitHub Actions for: -- **Continuous Integration**: Build and test on every push/PR -- **Artifact Creation**: VSIX files available for download -- **Marketplace Publishing**: Automatic publishing on GitHub releases +## CI/CD & publishing -See [PUBLISHING.md](docs/PUBLISHING.md) for detailed setup instructions. +GitHub Actions (`build-and-publish.yml`): -## License +- **On push / PR to `main`** — build, compile, package, and upload the `.vsix` as an artifact. +- **On a published GitHub Release** — `vsce publish` to the VS Code Marketplace and attach the + `.vsix` to the release. Requires the repository secret **`VSCE_PAT`** (an Azure DevOps + Marketplace token). + +To ship a new version: bump `version` in `package.json`, merge to `main`, then create a +GitHub Release whose tag matches that version. See [docs/PUBLISHING.md](docs/PUBLISHING.md). -This project is licensed under the MIT License. +--- + +## License -Copyright (c) 2025 Need2Code AB +MIT License — Copyright (c) 2026 Need2Code AB. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all copies or +substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING +BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. From 8f5a87336f65728e3defd5165f3d0946237189e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Elm=C3=A9n?= Date: Wed, 15 Jul 2026 15:40:27 +0200 Subject: [PATCH 3/5] feat: 'Set up Wine' command that runs the bundled setup script The setup-wine.sh script ships inside the .vsix, but a Marketplace user isn't in the repo, so './scripts/setup-wine.sh' didn't apply to them. Add a Command Palette command ('XAF Model Editor: Set up Wine (Linux/macOS)') that locates and runs the bundled script, and document the real bundled path in the README. Co-Authored-By: Claude Opus 4.8 --- README.md | 10 ++++++++-- out/extension.js | 21 +++++++++++++++++++++ out/extension.js.map | 2 +- package.json | 6 +++++- src/extension.ts | 18 ++++++++++++++++++ 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index c47d87b..3ec136b 100644 --- a/README.md +++ b/README.md @@ -65,10 +65,16 @@ the `xafModelEditor.modelEditorPath` setting (see [Configuration](#configuration The Model Editor is a Windows .NET WinForms application, so it runs through [Wine](https://www.winehq.org/). Two one-time steps: -**a) Configure Wine + the .NET runtimes** — run the helper script (installs Wine if missing, -creates a dedicated prefix, and installs the Windows .NET Desktop + ASP.NET Core runtimes): +**a) Configure Wine + the .NET runtimes.** Open the **Command Palette** (`Ctrl+Shift+P`) and run +**“XAF Model Editor: Set up Wine (Linux/macOS)”**. This runs the setup script that ships inside +the extension — it installs Wine (if missing), creates a dedicated prefix, and installs the +Windows .NET Desktop + ASP.NET Core runtimes. + +Prefer a terminal? The script is bundled with the installed extension: ```bash +bash ~/.vscode/extensions/dvisiousneed2codeab.xaf-modeleditor-*/scripts/setup-wine.sh +# …or, from a clone of this repository: ./scripts/setup-wine.sh ``` diff --git a/out/extension.js b/out/extension.js index ce3e8ef..def00be 100644 --- a/out/extension.js +++ b/out/extension.js @@ -95,6 +95,27 @@ function activate(context) { vscode.window.showInformationMessage("The Model Editor start dialog will be shown again next time."); }); context.subscriptions.push(resetDialogCmd); + // Command: run the bundled Wine setup script (Linux/macOS). The script ships inside the + // extension package, so users don't need the repo — this locates and runs it for them. + const setupWineCmd = vscode.commands.registerCommand('xaf-modeleditor.setupWine', async () => { + if (isWindows) { + vscode.window.showInformationMessage('Wine setup is only needed on Linux/macOS — on Windows the Model Editor runs natively.'); + return; + } + const script = context.asAbsolutePath(path.join('scripts', 'setup-wine.sh')); + if (!fs.existsSync(script)) { + vscode.window.showErrorMessage(`Wine setup script not found in the extension package (${script}).`); + return; + } + try { + fs.chmodSync(script, 0o755); + } + catch { /* best effort */ } + const terminal = vscode.window.createTerminal('XAF Model Editor — Wine setup'); + terminal.show(true); + terminal.sendText(`bash ${JSON.stringify(script)}`); + }); + context.subscriptions.push(setupWineCmd); const openModelEditorCmd = vscode.commands.registerCommand('xaf-modeleditor.openModelEditor', async (fileUri) => { outputChannel.show(true); log('Command triggered for file: ' + (fileUri?.fsPath || 'undefined')); diff --git a/out/extension.js.map b/out/extension.js.map index ded5f53..f11969d 100644 --- a/out/extension.js.map +++ b/out/extension.js.map @@ -1 +1 @@ -{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 7ec2566..eb8d946 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "xaf-modeleditor", "displayName": "XAF Model Editor Integration", "description": "Integrates DevExpress XAF Model Editor with VS Code. Right-click or double-click Model.xafml to build and launch the correct Model Editor version.", - "version": "0.0.24", + "version": "0.0.25", "publisher": "DvisiousNeed2CodeAB", "engines": { "vscode": ">=1.70.0" @@ -42,6 +42,10 @@ "command": "xaf-modeleditor.resetStartDialog", "title": "XAF Model Editor: Reset 'Don't show again' dialog" }, + { + "command": "xaf-modeleditor.setupWine", + "title": "XAF Model Editor: Set up Wine (Linux/macOS)" + }, { "command": "xaf-modeleditor.refreshModelTree", "title": "Refresh XAF Model Files Tree" diff --git a/src/extension.ts b/src/extension.ts index 1519b87..0d2166f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -63,6 +63,24 @@ export function activate(context: vscode.ExtensionContext) { vscode.window.showInformationMessage("The Model Editor start dialog will be shown again next time."); }); context.subscriptions.push(resetDialogCmd); + // Command: run the bundled Wine setup script (Linux/macOS). The script ships inside the + // extension package, so users don't need the repo — this locates and runs it for them. + const setupWineCmd = vscode.commands.registerCommand('xaf-modeleditor.setupWine', async () => { + if (isWindows) { + vscode.window.showInformationMessage('Wine setup is only needed on Linux/macOS — on Windows the Model Editor runs natively.'); + return; + } + const script = context.asAbsolutePath(path.join('scripts', 'setup-wine.sh')); + if (!fs.existsSync(script)) { + vscode.window.showErrorMessage(`Wine setup script not found in the extension package (${script}).`); + return; + } + try { fs.chmodSync(script, 0o755); } catch { /* best effort */ } + const terminal = vscode.window.createTerminal('XAF Model Editor — Wine setup'); + terminal.show(true); + terminal.sendText(`bash ${JSON.stringify(script)}`); + }); + context.subscriptions.push(setupWineCmd); const openModelEditorCmd = vscode.commands.registerCommand('xaf-modeleditor.openModelEditor', async (fileUri: vscode.Uri) => { outputChannel.show(true); log('Command triggered for file: ' + (fileUri?.fsPath || 'undefined')); From 64e0c2ae5a29c9fa4e36db6725dc21c9b47fc3c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Elm=C3=A9n?= Date: Wed, 15 Jul 2026 16:25:52 +0200 Subject: [PATCH 4/5] docs: remove broken empty Usage screenshot reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit docs/context-menu.png was a 0-byte placeholder, rendering as a broken image (and would not render on the Marketplace anyway — relative image paths require absolute URLs there). Drop the reference and the empty file; the numbered Usage steps stand on their own until a real screenshot is added. Co-Authored-By: Claude Opus 4.8 --- README.md | 4 ---- docs/context-menu.png | 0 2 files changed, 4 deletions(-) delete mode 100644 docs/context-menu.png diff --git a/README.md b/README.md index 3ec136b..d85ce39 100644 --- a/README.md +++ b/README.md @@ -103,9 +103,6 @@ seconds (it builds the solution). Watch **Output → XAF Model Editor** if anyth 1. **Right-click** a `Model.xafml` file in the Explorer (or use the **XAF Model Files** view). 2. Choose **Open with XAF Model Editor**. - - ![Open with XAF Model Editor](docs/context-menu.png) - 3. The extension builds the solution and launches the editor for your DevExpress version. ## Configuration @@ -154,7 +151,6 @@ Example (Windows): ├── scripts/ │ └── setup-wine.sh # Linux/macOS: configure Wine + .NET runtimes ├── docs/ -│ ├── context-menu.png # Screenshot used in this README │ ├── linux-wine-setup.md # Wine setup guide │ └── PUBLISHING.md # Publishing & CI/CD guide ├── build-vsix.ps1 # PowerShell build helper diff --git a/docs/context-menu.png b/docs/context-menu.png deleted file mode 100644 index e69de29..0000000 From 05c4b7c4f7fb05bd356cda3243d6c6d3b855f3d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Anders=20Elm=C3=A9n?= Date: Fri, 17 Jul 2026 20:44:16 +0200 Subject: [PATCH 5/5] feat: resolve module dependency closure in .NET artifacts output layout (#1) The standalone Model Editor loads the target project's DLL and resolves its references from that DLL's folder. A module (class library) doesn't copy its NuGet dependencies to its own output by default (CopyLocalLockFileAssemblies defaults to false for libraries), so opening the Model Editor against a module project in the .NET 8+ artifacts output layout failed with: Could not load file or assembly 'DevExpress.Persistent.BaseImpl.EFCore.vXX, Culture=neutral, ...'. The system cannot find the file specified. Extract the artifacts-layout lookup into a testable, vscode-free module and add a fallback: when the module's own output lacks its dependency closure, load the same module DLL from a project output that has it (typically the startup .Blazor/.Win app, whose executable output carries the full closure). Falls back to the bare module DLL with a clear warning if nothing complete is found. Validated end-to-end on Linux/Wine against the issue's XafAppSimple sample (retargeted 26.1 -> 25.2): the Culture=neutral error is reproduced with the bare module output and resolved via the fallback. A separate Wine text-rendering crash (GDI GetCharacterPlacement) is tracked independently. See docs/specs/artifacts-output-layout.md for the full rationale and validation. Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 11 ++ docs/specs/artifacts-output-layout.md | 183 ++++++++++++++++++++++++++ out/artifactsLayout.js | 154 ++++++++++++++++++++++ out/artifactsLayout.js.map | 1 + out/extension.js | 46 +------ out/extension.js.map | 2 +- package.json | 2 +- src/artifactsLayout.ts | 107 +++++++++++++++ src/extension.ts | 37 +----- 9 files changed, 462 insertions(+), 81 deletions(-) create mode 100644 docs/specs/artifacts-output-layout.md create mode 100644 out/artifactsLayout.js create mode 100644 out/artifactsLayout.js.map create mode 100644 src/artifactsLayout.ts diff --git a/README.md b/README.md index d85ce39..88ce25e 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,17 @@ Wine**. | **Linux** | Windows `.exe` via **Wine** | Wine + .NET runtimes + editor binaries | | **macOS** | Windows `.exe` via **Wine** | Wine (+ Rosetta 2 on Apple Silicon) + runtimes + binaries | +**Build layouts:** both the classic per-project `bin///` layout and the .NET 8+ +[artifacts output layout](https://learn.microsoft.com/en-us/dotnet/core/sdk/artifacts-output) +(``) are supported and auto-detected. + +> **Platform notes & deep dives** live in [`docs/`](docs/): +> - [Running on Linux & macOS via Wine](docs/linux-wine-setup.md) — full setup for all three platforms. +> - [Artifacts output layout & module dependency-closure](docs/specs/artifacts-output-layout.md) — +> why opening the Model Editor against a **module** project needs its dependency closure +> (set `true`, or let the extension +> resolve it from the startup app's output), plus the current cross-platform validation status. + --- ## Installation & setup diff --git a/docs/specs/artifacts-output-layout.md b/docs/specs/artifacts-output-layout.md new file mode 100644 index 0000000..47ae583 --- /dev/null +++ b/docs/specs/artifacts-output-layout.md @@ -0,0 +1,183 @@ +# Spec: .NET artifacts output layout support & module dependency-closure fallback + +- **Issue:** [#1 — Add support for solutions using .NET 8 "artifacts output layout"](https://github.com/Need2Code-AB/vscode.extensions.xaf.modeleditor/issues/1) +- **Reported by:** jhorv-ci — 2026-05-08 +- **Status:** Implemented; unit-verified and **validated end-to-end on Linux/Wine** (§4.2). A separate Wine text-rendering crash (§4.3) and macOS/Windows/real-display checks (§4.4) remain. +- **Branch:** `feat/linux-macos-wine-support` +- **Code:** [src/artifactsLayout.ts](../../src/artifactsLayout.ts), used by [src/extension.ts](../../src/extension.ts) + +--- + +## 1. Background + +The extension launches the DevExpress **standalone Model Editor** and points it at a project's +output assembly. Its command line (per DevExpress docs) is: + +``` +DevExpress.ExpressApp.ModelEditor.vXX.exe +``` + +- `moduleAssemblyFile` — the built DLL of the project whose `*.xafml` was opened. +- `diffsPath` — the project source folder that holds `Model.DesignedDiffs.xafml`. + +The Model Editor loads `moduleAssemblyFile`, instantiates the XAF module type, and **resolves that +assembly's references from the same folder the DLL sits in** (standard .NET assembly probing). + +### The two problems in the issue + +**Problem A — the artifacts output layout (the literal request).** +Historically the extension only looked for `bin///`. .NET 8+ offers the +[artifacts output layout](https://learn.microsoft.com/en-us/dotnet/core/sdk/artifacts-output) +(`` / `` in `Directory.Build.props`), which consolidates every +project's output into one folder at the repo root: + +``` +artifacts/ + bin///.dll # pivot = debug | release | debug_net8.0 | release_linux-x64 | ... + obj/… publish/… package/… +``` + +When this layout is used, no `bin/` exists inside each project, so the old lookup found nothing. + +**Problem B — the missing dependency closure (surfaced while validating the fix).** +Even after the DLL is found, opening the Model Editor against a **module (class library)** project +fails with: + +``` +Could not load file or assembly 'DevExpress.Persistent.BaseImpl.EFCore.v26.1, +Version=26.1.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a'. +The system cannot find the file specified. +``` + +Note `Culture=neutral` — this is a **regular** assembly, not a localization/satellite one. The +module DLL's folder contains *only the module DLL*, so the Model Editor cannot resolve the +DevExpress assemblies the module type needs. + +Root cause, from Microsoft's own docs: +[`CopyLocalLockFileAssemblies`](https://learn.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#copylocallockfileassemblies) +defaults to **`false` for class libraries** (and `true` for executables). So a module project does +not copy its transitive NuGet dependencies to its output folder, whereas the startup app +(`.Blazor`/`.Win`) does. Microsoft frames the fix around plugins — and the Model Editor loads the +module DLL exactly like a plugin. This is **not** artifacts-specific; enabling the artifacts layout +only relocates outputs, it does not change dependency copying. + +DevExpress documents the same requirement ("copy all assemblies required by your XAF application") +and the identical error: +[Ways to Invoke the Model Editor](https://docs.devexpress.com/eXpressAppFramework/113326) · +[Deployment Troubleshooting](https://docs.devexpress.com/eXpressAppFramework/113238). + +--- + +## 2. Why we are doing this + +- **Meet the request:** discover the module DLL in the artifacts output layout so the extension + works for modern .NET 8+ solutions. +- **Make it "just work":** a correctly-located DLL still fails to open when the module's output + lacks its dependency closure. We want the editor to open without forcing every user to change + their build first. + +## 3. Solutions + +### 3.1 User-side (recommended, documented in the issue reply) + +Add a solution-root `Directory.Build.props` so every project copies its full dependency closure to +its own output — which also means the Model Editor can be opened from **any** project: + +```xml + + + true + + +``` + +This is how our own solutions (e.g. N2C.Pineapple) are set up. + +### 3.2 Extension-side (implemented) — dependency-closure fallback + +`findDllInArtifactsLayout(projectFile, log)` in [src/artifactsLayout.ts](../../src/artifactsLayout.ts): + +1. Use the module's **own** output folder if it already carries the closure (contains a + `DevExpress.*.dll`). Preserves existing behaviour for `CopyLocalLockFileAssemblies=true` setups. +2. If the module's own output lacks the closure, load the **same module DLL** from another project's + output that has it — typically the startup `.Blazor`/`.Win` app. Preference order: a real app + over a test project, then the richest folder (most DLLs). The `diffsPath` is unchanged, so the + model being edited is identical; only the physical copy of the module DLL used for loading + changes, so all sibling dependencies resolve. +3. If nothing complete is found, fall back to the bare module DLL and log a clear warning + (build the startup project, or set `CopyLocalLockFileAssemblies=true`). + +Pivot handling: debug pivots are preferred; multi-target pivots (`debug_net8.0-windows`) are +matched. The search stops at the repo root (`.git`) while walking up to find `artifacts/`. + +--- + +## 4. Validation + +### 4.1 Done — selection logic (platform-independent) + +The DLL-selection algorithm is exercised against synthetic `artifacts/bin/**` trees +(scratchpad test, 8/8 passing): + +| Scenario | Expected | +| --- | --- | +| Incomplete module output + complete `.Blazor` app | loads module DLL from the `.Blazor` output | +| Module output already complete (`CopyLocalLockFileAssemblies=true`) | uses own output (unchanged) | +| Nothing complete | bare module DLL + warning | +| Complete test project + complete app | app preferred over test | +| Multi-target pivot (`debug_net8.0-windows`) | found | +| Debug and release both present | debug preferred | +| No `artifacts/` folder | `undefined` (falls through to `.exe` scenario) | +| Sibling has module DLL but not the closure | ignored → bare module DLL | + +> The synthetic test lives in the scratchpad, not the repo — the repo has no test runner yet. +> TODO: decide whether to add a minimal test runner and land these as real tests. + +### 4.2 Done — end-to-end on Linux (headless, via Wine + Xvfb) + +Validated against the issue's own `XafAppSimple-WithArtifactsOutput` sample, retargeted from +DevExpress 26.1 → 25.2 to match the locally installed Model Editor (26.1-only API +`LookupPropertyEditor.DefaultUseViewMode` commented out), built with `UseArtifactsOutput=true` and +**without** `CopyLocalLockFileAssemblies` — so the fallback path is what makes it open. + +- ✅ **Model Editor runs on Linux via Wine** (its WinForms dialogs render under Xvfb). +- ✅ **Bug reproduced on Linux:** launching against the bare module output + (`artifacts/bin/XafAppSimple.Module/debug/` — 1 DLL, no DevExpress) produces the exact + `Unable to create an instance … Could not load … DevExpress.Persistent.BaseImpl.EFCore.v25.2, + Culture=neutral … File not found` dialog — identical to the reporter's Windows screenshot. +- ✅ **Fallback selects the right DLL against the real tree:** `findDllInArtifactsLayout` returns + the module DLL from `artifacts/bin/XafAppSimple.Blazor.Server/debug/` (144 DLLs, full closure). +- ✅ **Assembly error resolved:** with that DLL the `Culture=neutral` failure is gone; execution + proceeds past module instantiation into model/UI construction. **The issue #1 fix is validated.** + +### 4.3 Separate, pre-existing issue — Wine text-rendering crash (NOT this fix) + +After the module loads, the headless run crashes with `0xC0000005` in a native GDI P/Invoke +`GetCharacterPlacement`, inside `DevExpress.XtraRichEdit.Layout.Export.GdiBoxMeasurer` on the +RichEdit background-formatter thread. This is a Wine GDI/text-measurement limitation, independent +of assembly resolution — it would occur equally with the `CopyLocalLockFileAssemblies` workaround; +our fix only lets execution reach it. Copying MS core fonts (Arial/Times/Verdana/…) into the Wine +prefix's `drive_c/windows/Fonts` did **not** clear it headless. + +Tracked separately from issue #1. Next steps: confirm on a **real display** (this may be an +Xvfb/font artifact rather than a true failure), and if it persists try `winetricks corefonts` +(with `wineboot` font registration) or a newer Wine build. + +### 4.4 Pending + +- [ ] **Real display** run on Linux — does the Model Editor window fully render (§4.3)? +- [ ] **macOS** (via Wine). +- [ ] **Windows** (native) — regression check + confirm the fallback line in the "XAF Model Editor" + output channel. +- [ ] `CopyLocalLockFileAssemblies=true` solution still opens from its own module output (no change). +- [ ] Classic `bin///` solution still works (no regression). + +--- + +## 5. References + +- Issue: +- .NET artifacts output layout: +- `CopyLocalLockFileAssemblies`: +- DevExpress — Ways to Invoke the Model Editor: +- DevExpress — Deployment Troubleshooting: diff --git a/out/artifactsLayout.js b/out/artifactsLayout.js new file mode 100644 index 0000000..3ef75f2 --- /dev/null +++ b/out/artifactsLayout.js @@ -0,0 +1,154 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.folderHasDependencyClosure = folderHasDependencyClosure; +exports.findDllInArtifactsLayout = findDllInArtifactsLayout; +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); +const noop = () => { }; +/** + * True when a folder contains an XAF module's dependency closure — at least one + * DevExpress.*.dll next to the module. A bare class-library output (the default, + * CopyLocalLockFileAssemblies=false) holds only the module DLL, so the standalone + * Model Editor cannot resolve the DevExpress assemblies the module type needs. + */ +function folderHasDependencyClosure(folder) { + try { + return fs.readdirSync(folder).some(f => /^DevExpress\..*\.dll$/i.test(f)); + } + catch { + return false; + } +} +function countDlls(folder) { + try { + return fs.readdirSync(folder).filter(f => f.toLowerCase().endsWith('.dll')).length; + } + catch { + return 0; + } +} +function listDirs(dir) { + try { + return fs.readdirSync(dir).filter(p => { + try { + return fs.statSync(path.join(dir, p)).isDirectory(); + } + catch { + return false; + } + }); + } + catch { + return []; + } +} +/** + * Among the pivot subfolders (debug preferred) of an artifacts project folder, + * returns the first that contains dllName, or undefined. + */ +function pickPivotFolderContaining(projectBin, dllName) { + const pivots = listDirs(projectBin) + .sort((a, b) => (a.toLowerCase().startsWith('debug') ? -1 : 0) - (b.toLowerCase().startsWith('debug') ? -1 : 0)); + for (const pivot of pivots) { + const folder = path.join(projectBin, pivot); + if (fs.existsSync(path.join(folder, dllName))) { + return folder; + } + } + return undefined; +} +/** + * Locates the project's output DLL in the .NET 8+ "artifacts output layout" + * (https://learn.microsoft.com/dotnet/core/sdk/artifacts-output), where bin/obj move out of each + * project into /artifacts/. Layout: artifacts/bin///.dll + * where is e.g. "debug", "release", or "debug_net9.0" for multi-targeted projects. + * + * The standalone Model Editor loads the returned DLL and resolves its references from that same + * folder. A module (class library) doesn't copy its NuGet dependencies to its own output by default + * (CopyLocalLockFileAssemblies is false for libraries, true for executables). So when the module's + * own folder lacks the DevExpress closure, we return the *same* module DLL from a project output + * that does have it — typically the startup .Blazor/.Win app, whose output carries the full closure. + * The model differences path passed alongside is unaffected (it stays the module's source folder). + */ +function findDllInArtifactsLayout(projectFile, logFn = noop) { + const projectName = path.basename(projectFile, path.extname(projectFile)); + const dllName = `${projectName}.dll`; + let dir = path.dirname(projectFile); + while (dir && dir.length > 2) { + const artifactsBin = path.join(dir, 'artifacts', 'bin'); + if (fs.existsSync(artifactsBin)) { + // 1. The project's own output folder — preferred when it already carries the closure. + const ownFolder = pickPivotFolderContaining(path.join(artifactsBin, projectName), dllName); + if (ownFolder && folderHasDependencyClosure(ownFolder)) { + return path.join(ownFolder, dllName); + } + // 2. The module's own output lacks its dependency closure. Find another project's output + // that holds a copy of this module DLL next to the full closure, preferring a real app + // over a test project and, among those, the richest folder. + let best; + for (const proj of listDirs(artifactsBin)) { + const folder = pickPivotFolderContaining(path.join(artifactsBin, proj), dllName); + if (!folder || !folderHasDependencyClosure(folder)) { + continue; + } + const cand = { dll: path.join(folder, dllName), count: countDlls(folder), isTest: /\.tests?$/i.test(proj) }; + const better = !best + || (best.isTest && !cand.isTest) + || (best.isTest === cand.isTest && cand.count > best.count); + if (better) { + best = cand; + } + } + if (best) { + logFn(`[artifactsLayout] '${dllName}' output lacks its dependency closure; loading it from a project output that has it: ${best.dll}`); + return best.dll; + } + // 3. Nothing complete found — fall back to the module's own DLL if it exists at all. + if (ownFolder) { + logFn(`[artifactsLayout] Warning: no project output with the full dependency closure found for '${dllName}'. ` + + `Using the module DLL as-is — build the startup project, or set true.`); + return path.join(ownFolder, dllName); + } + return undefined; // artifacts root found, but no matching DLL — don't keep walking up + } + if (fs.existsSync(path.join(dir, '.git'))) { + break; + } // stop at the repo root + dir = path.dirname(dir); + } + return undefined; +} +//# sourceMappingURL=artifactsLayout.js.map \ No newline at end of file diff --git a/out/artifactsLayout.js.map b/out/artifactsLayout.js.map new file mode 100644 index 0000000..e8ddeb8 --- /dev/null +++ b/out/artifactsLayout.js.map @@ -0,0 +1 @@ +{"version":3,"file":"artifactsLayout.js","sourceRoot":"","sources":["../src/artifactsLayout.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out/extension.js b/out/extension.js index def00be..7a776f4 100644 --- a/out/extension.js +++ b/out/extension.js @@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true }); exports.activate = activate; exports.deactivate = deactivate; const modelTree_1 = require("./modelTree"); +const artifactsLayout_1 = require("./artifactsLayout"); const vscode = __importStar(require("vscode")); const fs = __importStar(require("fs")); const os = __importStar(require("os")); @@ -420,49 +421,6 @@ async function buildSolution(solutionFile) { /** * Determines the correct arguments for Model Editor based on project type. */ -/** - * Locates the project's output DLL in the .NET 8+ "artifacts output layout" - * (https://learn.microsoft.com/dotnet/core/sdk/artifacts-output), where bin/obj move out of each - * project into /artifacts/. Layout: artifacts/bin///.dll - * where is e.g. "debug", "release", or "debug_net9.0" for multi-targeted projects. - */ -function findDllInArtifactsLayout(projectFile) { - const projectName = path.basename(projectFile, path.extname(projectFile)); - let dir = path.dirname(projectFile); - while (dir && dir.length > 2) { - const artifactsBin = path.join(dir, 'artifacts', 'bin'); - if (fs.existsSync(artifactsBin)) { - const projectBin = path.join(artifactsBin, projectName); - if (fs.existsSync(projectBin)) { - let pivots = []; - try { - pivots = fs.readdirSync(projectBin) - .filter(p => { try { - return fs.statSync(path.join(projectBin, p)).isDirectory(); - } - catch { - return false; - } }); - } - catch { /* ignore */ } - // Prefer a Debug build when several pivots exist. - pivots.sort((a, b) => (a.toLowerCase().startsWith('debug') ? -1 : 0) - (b.toLowerCase().startsWith('debug') ? -1 : 0)); - for (const pivot of pivots) { - const candidate = path.join(projectBin, pivot, `${projectName}.dll`); - if (fs.existsSync(candidate)) { - return candidate; - } - } - } - return undefined; // artifacts root found, but no matching DLL — don't keep walking up - } - if (fs.existsSync(path.join(dir, '.git'))) { - break; - } // stop at the repo root - dir = path.dirname(dir); - } - return undefined; -} async function getModelEditorArgs(projectFile, xafmlUri) { const dir = path.dirname(projectFile); log(`[getModelEditorArgs] Project dir: ${dir}`); @@ -518,7 +476,7 @@ async function getModelEditorArgs(projectFile, xafmlUri) { } // Not found in the per-project bin — try the .NET 8+ artifacts output layout, where every // project's output lives under /artifacts/bin//[_]/. - const artifactsDll = findDllInArtifactsLayout(projectFile); + const artifactsDll = (0, artifactsLayout_1.findDllInArtifactsLayout)(projectFile, log); if (artifactsDll) { log(`[getModelEditorArgs] Found DLL in artifacts output layout: ${artifactsDll}`); return [artifactsDll, dir]; diff --git a/out/extension.js.map b/out/extension.js.map index f11969d..7fe8143 100644 --- a/out/extension.js.map +++ b/out/extension.js.map @@ -1 +1 @@ -{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,4BA8LC;AAED,gCAA+B;AAhP/B,2CAAmD;AACnD,+CAAiC;AACjC,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAsC;AAEtC,gFAAgF;AAChF,kFAAkF;AAClF,sEAAsE;AACtE,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;AAE/C,SAAS,UAAU,CAAC,CAAS;IACzB,OAAO,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,wFAAwF;AACxF,yFAAyF;AACzF,mFAAmF;AACnF,SAAS,QAAQ;IACb,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;QAAC,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAAC,CAAC;IACtE,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC9D,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,SAAS,YAAY;IACjB,mEAAmE;IACnE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QAAC,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAAC,CAAC;IACzF,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpD,CAAC;AAED,oCAAoC;AACpC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;AAE5E,8CAA8C;AAC9C,mEAAmE;AACnE,SAAS,GAAG,CAAC,OAAe;IACxB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,aAAa,CAAC,UAAU,CAAC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC,CAAC;IACtD,gCAAgC;IAChC,iEAAiE;AACrE,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,OAAgC;IACrD,qCAAqC;IACrC,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAC3D,IAAI,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,gCAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QACtE,OAAO,CAAC,aAAa,CAAC,IAAI,CACtB,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,kCAAkC,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CACpG,CAAC;IACN,CAAC;IACD,iDAAiD;IACjD,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAClG,MAAM,WAAW,GAAG,qCAAqC,CAAC;QAC1D,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,8DAA8D,CAAC,CAAC;IACzG,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3C,wFAAwF;IACxF,uFAAuF;IACvF,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzF,IAAI,SAAS,EAAE,CAAC;YACZ,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,uFAAuF,CAAC,CAAC;YAC9H,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;QAC7E,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,yDAAyD,MAAM,IAAI,CAAC,CAAC;YACpG,OAAO;QACX,CAAC;QACD,IAAI,CAAC;YAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC;QAC/E,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,QAAQ,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzC,MAAM,kBAAkB,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,iCAAiC,EAAE,KAAK,EAAE,OAAmB,EAAE,EAAE;QACxH,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,GAAG,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC;YACD,8CAA8C;YAC9C,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;YACnD,GAAG,CAAC,sBAAsB,GAAG,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,oFAAoF,CAAC,CAAC;gBACrH,GAAG,CAAC,gCAAgC,CAAC,CAAC;gBACtC,OAAO;YACX,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACxD,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACX,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,2DAA2D,CAAC,CAAC;gBAC5F,GAAG,CAAC,sCAAsC,CAAC,CAAC;gBAC5C,OAAO;YACX,CAAC;YACD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7D,yCAAyC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;YACnE,IAAI,OAAO,GAAuB,MAAM,CAAC,GAAG,CAAS,iBAAiB,CAAC,CAAC;YACxE,IAAI,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvC,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;gBACzB,GAAG,CAAC,2CAA2C,GAAG,OAAO,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,SAAS,EAAE,CAAC;gBACnB,MAAM,cAAc,GAAG,+BAA+B,YAAY,4DAA4D,CAAC;gBAC/H,MAAM,OAAO,GAAG,sCAAsC,YAAY,MAAM,CAAC;gBACzE,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;gBAC7C,GAAG,CAAC,kDAAkD,GAAG,OAAO,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACJ,uFAAuF;gBACvF,sFAAsF;gBACtF,kGAAkG;gBAClG,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;gBAChC,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,EAAE,YAAY,CAAC,CAAC;gBAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,0CAA0C,YAAY,MAAM,CAAC,CAAC;gBACpG,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,sCAAsC,YAAY,MAAM,CAAC,CAAC;gBACnG,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC5C,GAAG,CAAC,+CAA+C,GAAG,OAAO,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAC1B,sCAAsC,OAAO,kFAAkF,EAC/H,UAAU,CACb,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBACf,IAAI,SAAS,KAAK,UAAU,EAAE,CAAC;wBAC3B,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC,CAAC;oBAC1G,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,2CAA2C,CAAC,CAAC;gBACjD,OAAO;YACX,CAAC;YACD,2EAA2E;YAC3E,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC;gBACD,IAAI,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACtD,qEAAqE;gBACrE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClB,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACzB,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzD,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC1B,eAAe,GAAG,IAAI,CAAC;wBAC3B,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACJ,gDAAgD;wBAChD,eAAe,GAAG,KAAK,CAAC;oBAC5B,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,OAAO,MAAW,EAAE,CAAC;gBACnB,GAAG,CAAC,0CAA0C,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;gBAC9E,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gDAAgD,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC;gBAC/G,OAAO;YACX,CAAC;YACD,IAAI,CAAC,eAAe,EAAE,CAAC;gBACnB,GAAG,CAAC,wEAAwE,CAAC,CAAC;gBAC9E,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,wEAAwE,CAAC,CAAC;gBACzG,OAAO;YACX,CAAC;YACD,sEAAsE;YACtE,MAAM,WAAW,GAAG,qCAAqC,CAAC;YAC1D,MAAM,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAU,WAAW,EAAE,KAAK,CAAC,CAAC;YAC5E,IAAI,CAAC,cAAc,EAAE,CAAC;gBAClB,MAAM,OAAO,GACT,6BAA6B;oBAC7B,oEAAoE;oBACpE,IAAI;oBACJ,cAAc,GAAG,OAAO,GAAG,IAAI;oBAC/B,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;oBACxD,IAAI;oBACJ,0EAA0E,CAAC;gBAC/E,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,kBAAkB,CAAC;qBACnF,IAAI,CAAC,MAAM,CAAC,EAAE;oBACX,IAAI,MAAM,KAAK,kBAAkB,EAAE,CAAC;wBAChC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;oBAClD,CAAC;gBACL,CAAC,CAAC,CAAC;YACX,CAAC;YACD,GAAG,CAAC,oCAAoC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YACjE,IAAI,eAAe,GAAQ,SAAS,CAAC;YACrC,IAAI,CAAC;gBACD,IAAI,SAAS,EAAE,CAAC;oBACZ,eAAe,GAAG,IAAA,qBAAK,EAAC,OAAO,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAChF,CAAC;qBAAM,CAAC;oBACJ,oFAAoF;oBACpF,sFAAsF;oBACtF,MAAM,WAAW,GAAG,CAAC,MAAM,CAAC,GAAG,CAAS,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;oBAC/E,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,GAAG,CAAS,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;2BAC3D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,CAAC;oBAClD,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvF,MAAM,GAAG,GAAG;wBACR,GAAG,OAAO,CAAC,GAAG;wBACd,UAAU,EAAE,UAAU;wBACtB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;wBAC1C,iFAAiF;wBACjF,mFAAmF;wBACnF,+EAA+E;wBAC/E,wBAAwB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,GAAG;wBACrE,gBAAgB,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG;wBACrD,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,GAAG;wBACvD,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,GAAG;qBACtD,CAAC;oBACF,GAAG,CAAC,uBAAuB,WAAW,gBAAgB,UAAU,UAAU,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACtG,eAAe,GAAG,IAAA,qBAAK,EAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;gBAC7F,CAAC;YACL,CAAC;YAAC,OAAO,QAAa,EAAE,CAAC;gBACrB,GAAG,CAAC,+CAA+C,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gCAAgC,GAAG,CAAC,QAAQ,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,CAAC;gBACnG,OAAO;YACX,CAAC;YACD,IAAI,CAAC,eAAe,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;gBAC3C,GAAG,CAAC,4CAA4C,CAAC,CAAC;gBAClD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iEAAiE,CAAC,CAAC;gBAClG,OAAO;YACX,CAAC;YACD,GAAG,CAAC,qCAAqC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;YACjE,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;gBACrC,GAAG,CAAC,qCAAqC,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;gBACnE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,8BAA8B,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;YACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,MAAc,EAAE,EAAE;gBACxD,GAAG,CAAC,sCAAsC,IAAI,aAAa,MAAM,EAAE,CAAC,CAAC;gBACrE,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACb,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iCAAiC,IAAI,aAAa,MAAM,GAAG,CAAC,CAAC;gBAChG,CAAC;YACL,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,mDAAmD,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,oBAAoB,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YACnE,GAAG,CAAC,oBAAoB,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;IACL,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,UAAU,KAAI,CAAC;AAE/B;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,OAAmB;IAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACpE,IAAI,MAAM;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QAC3G,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IACnD,oFAAoF;IACpF,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,6DAA6D,WAAW,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC;gBACD,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;gBAC5D,2GAA2G;gBAC3G,MAAM,QAAQ,GAAG,2EAA2E,CAAC;gBAC7F,IAAI,CAAC,CAAC;gBACN,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC9C,GAAG,CAAC,4CAA4C,OAAO,iCAAiC,GAAG,EAAE,CAAC,CAAC;wBAC/F,OAAO,GAAG,CAAC;oBACf,CAAC;gBACL,CAAC;gBACD,iFAAiF;gBACjF,MAAM,QAAQ,GAAG,6EAA6E,CAAC;gBAC/F,OAAO,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClD,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrB,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC9C,GAAG,CAAC,4CAA4C,OAAO,6CAA6C,GAAG,EAAE,CAAC,CAAC;wBAC3G,OAAO,GAAG,CAAC;oBACf,CAAC;gBACL,CAAC;YACL,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBACd,GAAG,CAAC,kEAAkE,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7F,CAAC;YACD,4GAA4G;YAC5G,MAAM;QACV,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,uEAAuE;IACvE,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACrD,GAAG,CAAC,mDAAmD,WAAW,EAAE,CAAC,CAAC;IACtE,oGAAoG;IACpG,MAAM,KAAK,GAAG,oFAAoF,CAAC;IACnG,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACX,GAAG,CAAC,uFAAuF,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACvG,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAED,mDAAmD;IACnD,MAAM,SAAS,GAAG,6EAA6E,CAAC;IAChG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9C,GAAG,CAAC,gCAAgC,OAAO,6BAA6B,GAAG,EAAE,CAAC,CAAC;YAC/E,OAAO,GAAG,CAAC;QACf,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACrE,IAAI,YAAY,EAAE,CAAC;gBACf,GAAG,CAAC,mEAAmE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1F,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IAED,GAAG,CAAC,kFAAkF,CAAC,CAAC;IACxF,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAAmB;IAC/C,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9D,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,YAAoB;IAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,GAAG,CAAC,0CAA0C,YAAY,GAAG,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,IAAI,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,IAAI,IAAI,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,GAAG,CAAC,iDAAiD,IAAI,EAAE,CAAC,CAAC;YAC7D,IAAI,MAAM;gBAAE,GAAG,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;YACtD,IAAI,MAAM;gBAAE,GAAG,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;YACtD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACb,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,8CAA8C,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,GAAG,CAAC,0BAA0B,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,6CAA6C,GAAG,CAAC,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC;YACtG,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH;;;;;GAKG;AACH,SAAS,wBAAwB,CAAC,WAAmB;IACjD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACxD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YACxD,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC5B,IAAI,MAAM,GAAa,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACD,MAAM,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;yBAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC;wBAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBAAC,CAAC;oBAAC,MAAM,CAAC;wBAAC,OAAO,KAAK,CAAC;oBAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtH,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBACxB,kDAAkD;gBAClD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvH,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,GAAG,WAAW,MAAM,CAAC,CAAC;oBACrE,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;wBAAC,OAAO,SAAS,CAAC;oBAAC,CAAC;gBACvD,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAC,CAAC,oEAAoE;QAC1F,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YAAC,MAAM;QAAC,CAAC,CAAC,wBAAwB;QAC9E,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,QAAoB;IACvE,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACtC,GAAG,CAAC,qCAAqC,GAAG,EAAE,CAAC,CAAC;IAChD,iDAAiD;IACjD,IAAI,MAA0B,CAAC;IAC/B,IAAI,WAA+B,CAAC;IACpC,IAAI,WAA+B,CAAC;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,GAAG,CAAC,0CAA0C,OAAO,EAAE,CAAC,CAAC;IACzD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACtG,GAAG,CAAC,uCAAuC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACvC,GAAG,CAAC,6CAA6C,MAAM,EAAE,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YACzI,GAAG,CAAC,yCAAyC,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC3E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACtB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;gBACvC,GAAG,CAAC,6CAA6C,SAAS,EAAE,CAAC,CAAC;gBAC9D,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;gBACrI,GAAG,CAAC,gCAAgC,SAAS,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClB,MAAM,GAAG,SAAS,CAAC;oBACnB,WAAW,GAAG,GAAG,CAAC;oBAClB,WAAW,GAAG,CAAC,CAAC;oBAChB,GAAG,CAAC,mCAAmC,IAAI,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC;oBAC/D,MAAM;gBACV,CAAC;YACL,CAAC;YACD,IAAI,MAAM;gBAAE,MAAM;QACtB,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,gDAAgD,OAAO,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,GAAuB,CAAC;IAC5B,IAAI,MAAM,EAAE,CAAC;QACT,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACzH,IAAI,GAAG,EAAE,CAAC;YACN,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC7B,GAAG,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,iDAAiD,MAAM,EAAE,CAAC,CAAC;QACnE,CAAC;IACL,CAAC;IACD,uBAAuB;IACvB,IAAI,MAAM,IAAI,GAAG,EAAE,CAAC;QAChB,GAAG,CAAC,mCAAmC,GAAG,aAAa,WAAW,aAAa,WAAW,GAAG,CAAC,CAAC;QAC/F,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtB,CAAC;IACD,0FAA0F;IAC1F,yFAAyF;IACzF,MAAM,YAAY,GAAG,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,YAAY,EAAE,CAAC;QACf,GAAG,CAAC,8DAA8D,YAAY,EAAE,CAAC,CAAC;QAClF,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;IACD,GAAG,CAAC,sGAAsG,CAAC,CAAC;IAC5G,6DAA6D;IAC7D,GAAG,CAAC,mEAAmE,GAAG,GAAG,CAAC,CAAC;IAC/E,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACjD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,GAAG,CAAC,mCAAmC,GAAG,aAAa,MAAM,EAAE,CAAC,CAAC;IACjE,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACzC,GAAG,CAAC,oCAAoC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACJ,mCAAmC;QACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3B,GAAG,CAAC,0DAA0D,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"} \ No newline at end of file +{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index eb8d946..6d96426 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "xaf-modeleditor", "displayName": "XAF Model Editor Integration", "description": "Integrates DevExpress XAF Model Editor with VS Code. Right-click or double-click Model.xafml to build and launch the correct Model Editor version.", - "version": "0.0.25", + "version": "0.0.26", "publisher": "DvisiousNeed2CodeAB", "engines": { "vscode": ">=1.70.0" diff --git a/src/artifactsLayout.ts b/src/artifactsLayout.ts new file mode 100644 index 0000000..e086793 --- /dev/null +++ b/src/artifactsLayout.ts @@ -0,0 +1,107 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +export type Logger = (message: string) => void; +const noop: Logger = () => { /* no-op */ }; + +/** + * True when a folder contains an XAF module's dependency closure — at least one + * DevExpress.*.dll next to the module. A bare class-library output (the default, + * CopyLocalLockFileAssemblies=false) holds only the module DLL, so the standalone + * Model Editor cannot resolve the DevExpress assemblies the module type needs. + */ +export function folderHasDependencyClosure(folder: string): boolean { + try { + return fs.readdirSync(folder).some(f => /^DevExpress\..*\.dll$/i.test(f)); + } catch { + return false; + } +} + +function countDlls(folder: string): number { + try { + return fs.readdirSync(folder).filter(f => f.toLowerCase().endsWith('.dll')).length; + } catch { + return 0; + } +} + +function listDirs(dir: string): string[] { + try { + return fs.readdirSync(dir).filter(p => { + try { return fs.statSync(path.join(dir, p)).isDirectory(); } catch { return false; } + }); + } catch { + return []; + } +} + +/** + * Among the pivot subfolders (debug preferred) of an artifacts project folder, + * returns the first that contains dllName, or undefined. + */ +function pickPivotFolderContaining(projectBin: string, dllName: string): string | undefined { + const pivots = listDirs(projectBin) + .sort((a, b) => (a.toLowerCase().startsWith('debug') ? -1 : 0) - (b.toLowerCase().startsWith('debug') ? -1 : 0)); + for (const pivot of pivots) { + const folder = path.join(projectBin, pivot); + if (fs.existsSync(path.join(folder, dllName))) { return folder; } + } + return undefined; +} + +/** + * Locates the project's output DLL in the .NET 8+ "artifacts output layout" + * (https://learn.microsoft.com/dotnet/core/sdk/artifacts-output), where bin/obj move out of each + * project into /artifacts/. Layout: artifacts/bin///.dll + * where is e.g. "debug", "release", or "debug_net9.0" for multi-targeted projects. + * + * The standalone Model Editor loads the returned DLL and resolves its references from that same + * folder. A module (class library) doesn't copy its NuGet dependencies to its own output by default + * (CopyLocalLockFileAssemblies is false for libraries, true for executables). So when the module's + * own folder lacks the DevExpress closure, we return the *same* module DLL from a project output + * that does have it — typically the startup .Blazor/.Win app, whose output carries the full closure. + * The model differences path passed alongside is unaffected (it stays the module's source folder). + */ +export function findDllInArtifactsLayout(projectFile: string, logFn: Logger = noop): string | undefined { + const projectName = path.basename(projectFile, path.extname(projectFile)); + const dllName = `${projectName}.dll`; + let dir = path.dirname(projectFile); + while (dir && dir.length > 2) { + const artifactsBin = path.join(dir, 'artifacts', 'bin'); + if (fs.existsSync(artifactsBin)) { + // 1. The project's own output folder — preferred when it already carries the closure. + const ownFolder = pickPivotFolderContaining(path.join(artifactsBin, projectName), dllName); + if (ownFolder && folderHasDependencyClosure(ownFolder)) { + return path.join(ownFolder, dllName); + } + // 2. The module's own output lacks its dependency closure. Find another project's output + // that holds a copy of this module DLL next to the full closure, preferring a real app + // over a test project and, among those, the richest folder. + let best: { dll: string; count: number; isTest: boolean } | undefined; + for (const proj of listDirs(artifactsBin)) { + const folder = pickPivotFolderContaining(path.join(artifactsBin, proj), dllName); + if (!folder || !folderHasDependencyClosure(folder)) { continue; } + const cand = { dll: path.join(folder, dllName), count: countDlls(folder), isTest: /\.tests?$/i.test(proj) }; + const better = !best + || (best.isTest && !cand.isTest) + || (best.isTest === cand.isTest && cand.count > best.count); + if (better) { best = cand; } + } + if (best) { + logFn(`[artifactsLayout] '${dllName}' output lacks its dependency closure; loading it from a project output that has it: ${best.dll}`); + return best.dll; + } + // 3. Nothing complete found — fall back to the module's own DLL if it exists at all. + if (ownFolder) { + logFn(`[artifactsLayout] Warning: no project output with the full dependency closure found for '${dllName}'. ` + + `Using the module DLL as-is — build the startup project, or set true.`); + return path.join(ownFolder, dllName); + } + return undefined; // artifacts root found, but no matching DLL — don't keep walking up + } + if (fs.existsSync(path.join(dir, '.git'))) { break; } // stop at the repo root + dir = path.dirname(dir); + } + return undefined; +} diff --git a/src/extension.ts b/src/extension.ts index 0d2166f..cdea48c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,4 +1,5 @@ import { XafModelTreeProvider } from './modelTree'; +import { findDllInArtifactsLayout } from './artifactsLayout'; import * as vscode from 'vscode'; import * as fs from 'fs'; import * as os from 'os'; @@ -386,40 +387,6 @@ async function buildSolution(solutionFile: string): Promise { /** * Determines the correct arguments for Model Editor based on project type. */ -/** - * Locates the project's output DLL in the .NET 8+ "artifacts output layout" - * (https://learn.microsoft.com/dotnet/core/sdk/artifacts-output), where bin/obj move out of each - * project into /artifacts/. Layout: artifacts/bin///.dll - * where is e.g. "debug", "release", or "debug_net9.0" for multi-targeted projects. - */ -function findDllInArtifactsLayout(projectFile: string): string | undefined { - const projectName = path.basename(projectFile, path.extname(projectFile)); - let dir = path.dirname(projectFile); - while (dir && dir.length > 2) { - const artifactsBin = path.join(dir, 'artifacts', 'bin'); - if (fs.existsSync(artifactsBin)) { - const projectBin = path.join(artifactsBin, projectName); - if (fs.existsSync(projectBin)) { - let pivots: string[] = []; - try { - pivots = fs.readdirSync(projectBin) - .filter(p => { try { return fs.statSync(path.join(projectBin, p)).isDirectory(); } catch { return false; } }); - } catch { /* ignore */ } - // Prefer a Debug build when several pivots exist. - pivots.sort((a, b) => (a.toLowerCase().startsWith('debug') ? -1 : 0) - (b.toLowerCase().startsWith('debug') ? -1 : 0)); - for (const pivot of pivots) { - const candidate = path.join(projectBin, pivot, `${projectName}.dll`); - if (fs.existsSync(candidate)) { return candidate; } - } - } - return undefined; // artifacts root found, but no matching DLL — don't keep walking up - } - if (fs.existsSync(path.join(dir, '.git'))) { break; } // stop at the repo root - dir = path.dirname(dir); - } - return undefined; -} - async function getModelEditorArgs(projectFile: string, xafmlUri: vscode.Uri): Promise { const dir = path.dirname(projectFile); log(`[getModelEditorArgs] Project dir: ${dir}`); @@ -472,7 +439,7 @@ async function getModelEditorArgs(projectFile: string, xafmlUri: vscode.Uri): Pr } // Not found in the per-project bin — try the .NET 8+ artifacts output layout, where every // project's output lives under /artifacts/bin//[_]/. - const artifactsDll = findDllInArtifactsLayout(projectFile); + const artifactsDll = findDllInArtifactsLayout(projectFile, log); if (artifactsDll) { log(`[getModelEditorArgs] Found DLL in artifacts output layout: ${artifactsDll}`); return [artifactsDll, dir];