FODevManager is a development utility for managing Dynamics 365 Finance and Operations (D365FO) model deployments via customizable developer profiles.
The system includes:
- A powerful .NET 9 console CLI
- A modern WinUI 3 desktop UI
- Git-aware model tracking
- Automated profile switching, PeriTask integration, and structured logging
- Create, delete, and switch between multiple isolated developer profiles
- Each profile has a custom Visual Studio
.slnand database config - Easily import/export profile JSON files
- Add and remove models from profiles using CLI or UI
- View deployment status, Git repo info, and PeriTask assignment
- Automatically creates:
- Metadata folder structure
- Empty project folder with
.rnrproj - Model descriptor XML file in
Descriptor/
- Converts models from
PackagesLocalDirectoryinto a project-ready format underDefaultSourceDirectory - Registers model in the selected profile
- Deploy/undeploy models via hard links or junctions to
PackagesLocalDirectory - Automatic update of profile JSON deployment status
- Git clean-check before switching branches
- Detect if a model is in a Git repository
- Switch to a PeriTask-based branch (
feature/TASK-1234) - Open remote repo URLs in the browser
- Modern interface for managing models, profiles, and deployment
- Inline Git and PeriTask actions
- Multi-line status logger with message severity
- Profile import/export, build info, and icon-based buttons
- .NET 9 SDK (Download)
- Windows 11 or 10 (Dev Mode enabled)
- Visual Studio 2022
- (Optional) Git CLI, PeriTask access
dotnet build
dotnet publish -c Release -o publishThen run either:
fodev.exe(console CLI)FODevManager.WinUI.exe(desktop app)
/FODevManager
├── Program.cs # Console entry point
├── WinUI/ # GUI project
├── Services/
│ ├── ProfileService.cs
│ ├── ModelDeploymentService.cs
│ └── VisualStudioSolutionService.cs
├── Models/
├── Utils/
├── Config/
├── appsettings.json
├── Tests/
├── publish/
fodev.exe -profile "DevProfile" <command> [options]| Command | Description |
|---|---|
create |
Creates a new profile |
delete |
Deletes a profile |
check |
Validates paths/configs |
list |
Lists available profiles |
| Command | Description |
|---|---|
-model "Name" add "path" |
Adds a model to the profile |
-model "Name" remove |
Removes the model |
-model "Name" check |
Validates model deployment |
list |
Lists all models in the profile |
| Command | Description |
|---|---|
deploy |
Deploys all undeployed models |
-model "Name" deploy |
Deploys a specific model |
| Command | Description |
|---|---|
git-check |
Checks if model path is a Git repo |
git-open |
Opens remote repo in browser |
switch-task 1234 |
Creates & switches to branch feature/TASK-1234 |
Edit appsettings.json:
{
"ProfileStoragePath": "%APPDATA%/FODevManager",
"DeploymentBasePath": "C:/AOSService/PackagesLocalDirectory",
"DefaultSourceDirectory": "C:/Source/D365FO"
}| Feature | Details |
|---|---|
| Profile dropdown | Auto-load profiles from config |
| Model table | Git-aware, deploy status, task ID |
| PeriTask assign | Supports branch creation & URL opening |
| Git repo link | Button opens remote repo |
| Deployment | Model-level and profile-level deploy/undeploy |
| Logging | Multi-line status pane with message severity |
| About dialog | Shows version + build date |
| Import profile | Load profile JSON via folder picker |
dotnet testCovers CommandParser, ProfileService, and ModelDeploymentService.
- ✅ WinUI 3 frontend (v1 complete)
- ✅ Git branch switch integration
- 🧪 Logging via Serilog (in progress)
- 🧱 MSIX packaging or installer (future)
- 🧊 Multi-user profile sharing (future)
- 🧪 Test coverage for more services
- Open issues or PRs on GitHub
- Contact mortenaa@gmail.com for questions or feature requests
Licensed under the MIT License