D365FO Deploy Portal - Package Deployment to Power Platform
Web-based deployment automation tool for Microsoft Dynamics 365 Finance and Operations (D365 F&O). Deploy Lifecycle Services (LCS) and Unified packages to multiple Power Platform / Dataverse environments in parallel. Bidirectional package converter: LCS→Unified and Unified→LCS. Inject licenses into Unified packages. Merge LCS and Unified packages. Parallel PAC CLI deployment to all environments simultaneously. CLI for headless conversion, full REST API with Swagger, pipeline-ready (Azure DevOps, GitLab CI). Drag-and-drop UI, real-time logs, full deployment history. Docker container or self-contained Windows app — no .NET installation required.
D365 F&O Package Deployment Tool: Automate LCS↔Unified Conversion, License Injection, and Parallel Multi-Environment Deployment
Deploying Microsoft Dynamics 365 Finance and Operations (D365 F&O / D365FO / D365 FnO) packages to Power Platform and Dataverse environments is a complex, multi-step process. Teams must manually download packages from Lifecycle Services (LCS), convert between LCS and Unified formats, inject licenses, authenticate with PAC CLI for each environment, and execute deployment commands one by one. When you have multiple sandbox, UAT, and production environments, this becomes a time-consuming, error-prone routine.
The Challenge
Organizations deploying D365 Finance and Operations packages to Power Platform and Dataverse environments face manual, repetitive workflows: converting between LCS and Unified formats, injecting licenses into packages, authenticating via PAC CLI, and deploying to each sandbox and production environment one by one. With multiple environments and frequent updates, this becomes a full-time job — with no centralized history, no real-time visibility, and high risk of human error.
The Solution: Unified Deployment Portal
D365FO Deploy Portal is a web-based deployment automation tool that replaces the entire manual deployment pipeline with a single, intuitive GUI. It includes a bidirectional package converter (LCS→Unified and Unified→LCS), license injection into Unified packages, and parallel deployment to multiple environments. Upload packages, merge them if needed, convert in either direction, inject licenses, select target Dataverse environments, and deploy — all from one dashboard. Real-time logs stream directly to your browser, and full deployment history is always available.
How It Works
- Upload: Drag-and-drop LCS, Unified, or other ZIP packages — the system auto-detects package type by analyzing ZIP contents
- Merge (optional): Select 2+ LCS or Unified packages and merge them into a single combined package
- Convert: Convert packages bidirectionally — LCS→Unified for Power Platform deployment, or Unified→LCS when you need the original format
- Inject License (optional): Embed license files into Unified packages before deployment
- Deploy: Select a package and one or more target environments, click "Start Deploy" — parallel PAC CLI deployment runs simultaneously to all selected environments
LCS Package → [Merge] → [Convert to Unified] → [Inject License] → Parallel Deploy via PAC CLI
Unified Package → [Merge] → [Inject License] → Parallel Deploy via PAC CLI
Unified Package → [Convert to LCS] → LCS Package (reverse conversion)
Key Capabilities
📦 Package Management
Smart Upload
Upload LCS, Unified, or any ZIP packages. The system auto-detects the package type by analyzing contents — looks for AOSService/, HotfixInstallationInfo.xml (LCS), or TemplatePackage.dll (Unified).
Package Merging (LCS & Unified)
Select 2 or more LCS or Unified packages and merge them into a single combined package. Custom merge names with expandable source info showing exactly which packages were combined. Works for both LCS and Unified package types.
Bidirectional Conversion
Convert LCS packages to Unified format for Power Platform deployment, or convert Unified packages back to LCS format when needed. Both directions available from the UI, REST API, and CLI.
License Injection
Inject license files directly into Unified packages before deployment. No manual ZIP manipulation or XML editing — upload the license, select the package, and the tool embeds it automatically.
Package List
Full sortable, searchable list of all uploaded packages. Expandable rows show merge source details. Filter by type, search by name — manage hundreds of packages effortlessly.
🚀 Multi-Environment Deployment
Parallel Deploy to Multiple Environments
Select a package, check all target environments, click one button — PAC CLI deployment runs in parallel to all selected environments simultaneously. No sequential waiting — all environments deploy at the same time.
Full CRUD for target environments. Bulk import from Setup-ServicePrincipal.ps1 script output — add 10+ environments in one paste.
Uses Azure AD Service Principal for PAC CLI authentication. No manual logins, no browser popups — fully automated.
All Client Secrets are encrypted using ASP.NET Core Data Protection API before storing in the database. Enterprise-grade security.
⌨️ CLI, REST API, Swagger & Pipelines
Automation Without the UI
Use the portal from scripts, CI/CD pipelines, or convert packages without starting the web server.
Run the container with convert and paths to input/output ZIP — LCS→Unified conversion without the web UI. Same with dotnet run -- convert locally.
Full API: list/upload packages, convert LCS→Unified and Unified→LCS, merge LCS/Unified packages, inject licenses into Unified packages, download. Integrate from any HTTP client or script.
Interactive API docs at /swagger — try endpoints and see request/response schemas in the browser.
Call the API from Azure DevOps, GitLab CI, or any pipeline: upload artifact → convert to Unified → download result. No GUI required.
📊 Real-Time Logs & History
-
📡
Live Streaming via SignalR
Watch deployment output in real time directly in your browser. Every line from PAC CLI and the conversion process is streamed live for each environment in parallel.
-
📋
Full Deployment History
Every deployment is recorded with status, timestamps, package info, and target environment. Filter by package, environment, status, or date range.
-
🔎
Deployment Detail View
Click any deployment to see the complete log output — useful for debugging failed deployments or auditing past actions.
-
📈
Dashboard Overview
At-a-glance counters for packages, environments, and deployments. Recent deployment activity and setup warnings — everything on the home screen.
🔐 Security & Configuration
Enterprise-Grade Security
- ✅ Encrypted Secrets: Client Secrets encrypted with ASP.NET Core Data Protection API before database storage
- ✅ Service Principal Auth: Azure AD non-interactive authentication — no stored user passwords
- ✅ Configurable Paths: All tool paths configurable via Settings UI — no hardcoded paths in the application
- ✅ Structured Logging: Serilog with console + rolling file output for full audit trail
🖥️ Application Pages
| Page | URL | Description |
|---|---|---|
| Dashboard | / |
Package/environment/deployment counters, recent deployments, setup warnings |
| Packages | /packages |
Upload packages, merge, view list with sorting/search/expandable merge info |
| Environments | /environments |
CRUD for target environments, bulk import from script output |
| Deploy | /deploy |
Select package + environments, start deployment to all at once |
| History | /deployments |
Full deployment history with status, click for details |
| Deployment Detail | /deployments/{id} |
Real-time log viewer for a specific deployment |
| Settings | /settings |
Configure tool paths, storage, view tool status |
| Swagger (API docs) | /swagger |
Interactive REST API documentation — try endpoints, see schemas |
💼 Use Cases
👨💻 For D365 F&O Developers
Deploy packages to sandbox and dev/test Dataverse environments without leaving the browser. Upload, merge LCS or Unified packages, convert bidirectionally (LCS↔Unified), inject licenses, and deploy in parallel — all in a few clicks instead of command-line gymnastics.
⚙️ For DevOps Engineers
Release pipelines handle scheduled, repeatable deployments perfectly — but not every task fits a pipeline. Ad-hoc hotfixes, ISV package testing across sandboxes, quick package validation before production — Deploy Portal covers this class of tasks with full history, real-time logs, and automated conversion. No pipeline setup needed for one-off operations.
🏢 For Enterprise Environments
When your organization has 5–15+ Power Platform environments, even ad-hoc deployments become complex. Deploy Portal handles multi-environment deployment with encrypted credentials, full audit trail, and bulk environment import — enterprise-grade security without enterprise-grade complexity.
🔧 For IT Administrators
Self-contained deployment tool — no .NET installation required on target machines. Run as a Docker container or standalone Windows application. Configurable via GUI, no config files to edit manually. Setup in minutes, zero dependencies on the host.
📋 For Release Managers
Centralized deployment history across all Power Platform environments — know who deployed what, where, and when. Real-time visibility into deployment progress via SignalR streaming. Full audit trail with searchable, filterable logs for compliance. Plan and coordinate releases across multiple environments with confidence.
🏗️ For Technical Delivery Managers (TDM)
Enterprise-grade deployment automation with encrypted credentials, Service Principal authentication, and structured logging. REST API for integration with your project's toolchain. Reduce deployment risk and manual effort across multiple projects and environments. Standardize D365FO package deployment process across your organization.
🐳 Deployment Options
Docker Container
Linux container with .NET Runtime and PAC CLI pre-installed. Built-in bidirectional LCS↔Unified converter. One command to run.
Self-Contained Windows
Single folder with embedded .NET Runtime. Copy to target machine, double-click start.cmd — no prerequisites needed.
Development Mode
Hot reload with dotnet watch. Open source for internal customization. Full Playwright E2E test suite included.
🛠️ Technical Stack
Core Technologies
- 🔷 Blazor Server — interactive UI with server-side rendering
- 🎨 MudBlazor 8.x — Material Design component library
- ⚙️ ASP.NET Core 9.0 — backend services and API
- 🗄️ SQLite + EF Core — zero-config database
- 📡 SignalR — real-time log streaming
Architecture
- 🔄 Background workers with Channel<T>
- 🔒 Data Protection API for secret encryption
- 📝 Serilog structured logging
- 🐳 Docker + Docker Compose support
- 🧪 Playwright E2E testing
📋 Package Types Supported
| Type | Description | Auto-Detection |
|---|---|---|
| LCS | Original Dynamics 365 package format from Lifecycle Services | Contains AOSService/ or HotfixInstallationInfo.xml |
| Unified | Converted format ready for Power Platform deployment | Contains TemplatePackage.dll |
| Merged | Result of merging 2+ LCS packages into one | Created by the app, shows source packages |
| Other | Any other ZIP file | None of the above patterns matched |
⚡ Quick Start — Try It in 2 Minutes
Docker — One Command to Start
All you need is Docker installed on your machine. No .NET, no PAC CLI, no SDK — everything is inside the container.
Step 1 — Start the container:
docker run -d -p 5000:5000 --name d365FOportal vglu/d365fo-deploy-portal:latest
Step 2 — Open in your browser:
http://localhost:5000
Step 3 — You're in the portal. From here:
- • Go to Environments — add your Power Platform / Dataverse environments (or bulk-import via script)
- • Go to Packages — drag-and-drop your LCS or Unified ZIP packages
- • Go to Deploy — select a package, check target environments, click Start Deploy
- • Watch the real-time logs as deployment runs
The container includes .NET Runtime, PAC CLI, and a built-in bidirectional LCS↔Unified converter. The SQLite database and uploaded packages are persisted via Docker volumes — your data survives container restarts.
CLI (no web UI):
docker run --rm -v /path/to/packages:/data vglu/d365fo-deploy-portal:latest convert /data/MyLcs.zip /data/MyUnified.zip
REST API: http://localhost:5000/swagger — use from scripts or pipelines (upload → convert → download).
💻 Alternative: Windows (Self-Contained)
No Docker? No problem. Copy the publish/ folder to any Windows machine, double-click start.cmd, and open http://localhost:5000 in your browser. No .NET installation required — everything is embedded.
# Or run manually:
DeployPortal.exe --urls "http://localhost:5000"
🔧 Configuration
All parameters are configurable via the Settings UI or environment variables:
- •
PacCliPath— path to pac.cmd or pac.exe (auto-detect from PATH) - •
PackageStoragePath— directory for uploaded packages - •
DatabasePath— path to SQLite database file - •
TempWorkingDir— temp directory for merge/convert operations - •
ConverterEngine— built-in bidirectional LCS↔Unified converter - •
ProcessingMode— Local or Azure processing
💡 Why This Matters
For organizations running Microsoft Dynamics 365 Finance and Operations (D365 F&O), deploying packages from Lifecycle Services to Power Platform and Dataverse environments involves two types of tasks. Scheduled, repeatable releases are best handled by CI/CD pipelines — and they should be. But there's another class of tasks: ad-hoc hotfixes, ISV package testing, sandbox deployments, package conversion and validation. These happen constantly and don't justify building a pipeline for each one. D365FO Deploy Portal is built for exactly this — eliminating manual overhead while providing:
- Single UI: Upload, merge LCS & Unified packages, convert bidirectionally (LCS↔Unified), inject licenses, and deploy — no command-line tools, no context switching
- CLI & REST API: Convert via Docker CLI without the web server; full REST API with Swagger for scripts and pipelines
- Pipeline-Ready: Integrate into Azure DevOps, GitLab CI, or any CI/CD — upload, convert, download via API
- Parallel Deployment: PAC CLI runs in parallel to all selected environments simultaneously — not one by one
- Real-Time Visibility: Watch deployment progress live via SignalR streaming
- Full Audit Trail: Complete deployment history with searchable, filterable logs
- Zero-Config Distribution: Self-contained app or Docker container — no .NET installation required
- Enterprise Security: Encrypted secrets, Service Principal authentication, structured logging
If you manage D365 F&O package deployments to Power Platform and Dataverse environments — whether converting packages between LCS and Unified formats, injecting licenses into Unified packages, merging multiple packages, or running parallel deployments to sandbox environments — this deployment automation tool transforms a tedious manual process into a streamlined workflow.
❓ Frequently Asked Questions
How to deploy D365 Finance and Operations packages to Power Platform without LCS?
Can Deploy Portal convert packages in both directions — LCS to Unified and Unified to LCS?
How to inject a license into a Unified D365FO package?
How to deploy D365FO packages to multiple Dataverse environments in parallel?
How to automate PAC CLI deployment without interactive login?
Can I merge multiple D365FO packages into one before deployment?
Can I use Deploy Portal from scripts or CI/CD pipelines without the web UI?
convert and input/output paths to convert LCS→Unified or Unified→LCS without starting the web server. REST API: the portal exposes a full API (upload, convert in both directions, merge LCS/Unified packages, inject licenses, download). Interactive documentation is at /swagger. You can call the API from Azure DevOps, GitLab CI, or any pipeline: upload a build artifact, POST to convert, then download the result — no GUI required.
Does Deploy Portal work in Docker? What are the system requirements?
docker run -d -p 5000:5000 --name d365FOportal vglu/d365fo-deploy-portal:latest and open http://localhost:5000. No additional software installation needed. For Windows, use the self-contained build — copy the folder to any machine and double-click start.cmd. No .NET installation required on the host.
What is the difference between LCS and Unified package formats in D365 F&O?
📞 Contact & Support
For questions, licensing, or demo requests:
- Email: vhlu@sims-service.com
- Website: https://sims-service.com
Proprietary Software
D365FO Deploy Portal is proprietary software by SIMS tech. Contact us for licensing, pricing, and deployment options tailored to your organization's needs.