FO Dev Manager is a Windows desktop utility for managing Dynamics 365 Finance and Operations development profiles, repositories, models, deployment links, Git workflows, Visual Studio solutions, and compiled NuGet package builds.
The primary experience is the WinUI 3 desktop app. A console entry point is still available for profile and model operations.
- App version:
1.1.5 - Runtime:
.NET 10 - UI: WinUI 3, Windows App SDK
- Platform: Windows x64
FO Dev Manager keeps a complete FO development setup in a profile:
- Profile name, active state, database name, and solution path
- Git repositories and repository-level settings
- Source models under repository
MetadataandProjectfolders - Compiled models and compiled NuGet model dependencies
- Deployment state for symbolic links into
PackagesLocalDirectory - Task metadata, Git branch information, and repository health state
Profiles are stored locally as JSON and can also be imported from repository artifacts.
- Create, delete, switch, import, and export developer profiles
- Store profile artifacts in repositories for repeatable team setup
- Import profiles directly from a Git repository
- Detect model changes in repo-stored profile artifacts and prompt for re-import
- Apply the profile database name to FO
web.config
- Group models by Git repository in the UI
- Track repository root, Git URL, preferred branch, main branch, and last known branch
- Support source, compiled, and compiled NuGet model types
- Keep repository-backed and standalone models in the same profile
- Assign task metadata at repository level
- Deploy and undeploy profile models by creating or removing links under
PackagesLocalDirectory - Check deployment status against actual filesystem state
- Prepare compiled NuGet model folders before deployment or package builds
- Keep profile deployment flags aligned with the detected state
- Fetch and inspect repository status from the active profile
- Switch repositories to task branches with optional auto-stash behavior
- Merge the configured main branch into the active branch when needed
- Reset a profile safely by stashing changes, checking out main, fetching, and fast-forward pulling
- Open repository URLs from the UI
- Resolve the solution path from the active profile
- Prefer the main FO model repository for solution ownership
- Create or reuse solutions when importing or switching profiles
- Add source model projects without duplicating model entries
- Open the active profile solution from the app
- Add or update compiled NuGet model references from package URLs
- Track package ID, version, source URL, and extracted compiled model folder
- Download private package feed dependencies using configured Azure Artifacts credentials
- Use
Build\isv.configto resolve compiled NuGet package references per repository - Include only descriptor-referenced compiled NuGet models when building a source model package
- Build source FO models into compiled NuGet artifacts
- Restore FO build packages and compiler packages through NuGet
- Include standard FO references, compiled NuGet references, and model-specific binary dependencies
- Generate package build solutions for source models
- Optionally push the created compiled NuGet package to a configured feed
- Log build diagnostics and NuGet failures with actionable messages
- Configure Azure Artifacts username, PAT, and API key for private feeds
- Configure a custom
nuget.exepath when it is not available onPATH - Configure automatic package push behavior after package builds
- Preserve existing installed
appsettings.jsonduring installer upgrades - Enable long path support in the app manifest
- Windows 10 or Windows 11 x64
- Developer Mode enabled for link creation workflows
- Visual Studio 2022 with Dynamics 365 FO development tooling
- .NET 10 SDK
- Git CLI
nuget.exeonPATHor configured in Settings- Access to any private Azure Artifacts feeds used by repository
nuget.configorBuild\isv.config
From the repository root:
dotnet build FODevManager.sln
dotnet publish FODevManager.WinUI\FODevManager.WinUI.csproj -c Release -r win-x64 --self-contained trueRun the desktop app from the publish output:
FODevManager.WinUI.exeThe Inno Setup script builds the installer from the WinUI publish folder:
innosetup.iss
The WinUI app reads FODevManager.WinUI\appsettings.json. Installed applications keep their own copy under the install directory.
{
"ProfileStoragePath": "%APPDATA%\\FODevManager",
"DeploymentBasePath": "C:\\AOSService\\PackagesLocalDirectory",
"DefaultSourceDirectory": "C:\\Dev\\FO",
"DeployablePackages": "%APPDATA%\\FODevManager\\DeployablePackages",
"ModelIdBegin": 896001001,
"ModelIdEnd": 896009999,
"TaskUrl": "https://tasks.peritus.no/nb-NO/Case/Details/",
"CheckUncommittedBeforeSwitch": false,
"AzureArtifactsUsername": "",
"AzureArtifactsPat": "",
"AzureArtifactsApiKey": "",
"NuGetExecutablePath": "",
"PushDeployablePackageOnBuild": false,
"PushDeployablePackageSource": ""
}Important settings:
ProfileStoragePath: local profile JSON and app data rootDeploymentBasePath: FOPackagesLocalDirectoryDefaultSourceDirectory: default source repository rootDeployablePackages: extracted compiled NuGet package storageNuGetExecutablePath: optional explicit path tonuget.exePushDeployablePackageOnBuild: push compiled NuGet packages immediately after buildPushDeployablePackageSource: feed name or source used when pushing packages
The console project remains available for profile and model automation:
fodev.exe -profile "DevProfile" <command> [options]Profile commands:
| Command | Description |
|---|---|
create |
Creates a new profile |
import |
Imports a profile JSON file |
delete |
Deletes a profile |
check |
Validates profile paths and state |
list |
Lists profiles or models in a profile |
deploy |
Deploys all undeployed models |
undeploy |
Undeploys all deployed models |
open-vs |
Opens the active profile solution |
git-fetch |
Fetches latest Git state for repositories |
switch |
Switches to the selected profile |
db-set |
Sets the profile database name |
db-apply |
Applies the database name to FO configuration |
Model commands:
| Command | Description |
|---|---|
-model "Name" add "path" |
Adds a model to the profile |
-model "Name" remove |
Removes a model from the profile |
-model "Name" deploy |
Deploys one model |
-model "Name" undeploy |
Undeploys one model |
-model "Name" check |
Checks deployment state |
-model "Name" git-status |
Checks whether the model is in a Git repository |
-model "Name" git-open |
Opens the model repository remote URL |
-model "Name" peri |
Assigns task metadata |
FODevManager/
FODevManager/ Console entry point
FODevManager.WinUI/ WinUI 3 desktop app
FoDevManager.Shared/ Models, services, config, logging, Git and file helpers
FODevManager.Tests/ NUnit tests for services and workflows
docs/superpowers/ Design specs and implementation plans
innosetup.iss Installer definition
Important service areas:
ProfileService: profile lifecycle, import/export, repository/model orchestrationModelDeploymentService: deployment and undeployment link handlingDeployablePackageService: compiled NuGet package install, reference resolution, and package buildsVisualStudioSolutionService: solution creation, project discovery, and package build solution generationGitHelper: Git command execution and repository state helpers
Run the test suite with:
dotnet test FODevManager.slnThe tests cover command parsing, profile handling, deployment behavior, Visual Studio solution generation, compiled NuGet package preparation, and package build reference resolution.
- Improve deployment status consistency and symlink validation
- Continue reducing orchestration in
MainWindow.xaml.cs - Expand compiled NuGet package install and update workflows
- Improve Git remote parsing beyond Azure DevOps-specific assumptions
- Add more service-level tests for profile switching, import/export, and package workflows
- Prefer small, focused changes that preserve existing profile and repository workflows
- Keep source models, compiled models, and compiled NuGet models in scope when changing model logic
- Preserve persisted profile JSON contracts unless a migration strategy is included
- Use
MessageLoggerfor app and shared-service logging
Licensed under the MIT License.