Let's simplify publishing new NuGet packages for x++ builds
4 - Extension and NuGet feeds
Before creating any pipelines, you need two marketplace extensions and a NuGet feed containing the X++ compiler packages. This article gets those in place.
Step 1: Install Required Extensions
Your Azure DevOps organization needs two extensions from the Visual Studio Marketplace.
You'll need Organization Administrator permissions to install them.
Power Platform Build Tools
Provides: PowerPlatformToolInstaller@2, PowerPlatformDeployPackage@2, pac CLI
- Go to: Power Platform Build Tools
- Click Get it free
- Select your Azure DevOps organization
- Click Install
Dynamics 365 Finance and Operations Tools
Provides: XppUpdateModelVersion@0, XppCreatePackage@2
- Go to: Dynamics 365 Finance and Operations Tools
- Click Get it free
- Select your Azure DevOps organization
- Click Install
You can verify both are installed at:
Organization settings > Extensions
Step 2: Create an Azure Artifacts Feed
The build pipeline downloads ~2 GB of X++ compiler packages from a NuGet feed.
Azure Artifacts hosts these within your ADO organization. I suggest you see this related article on ways to automate this here. You can use the linked stategy to get everything uploaded once you have a feed based on a commit and it will generate the packages.config to upload into out repo with code.
- In your Azure DevOps project, go to Artifacts
- Click + Create Feed
- Fill in:
- Name: D365 (or your preferred name)
- Visibility: Members of your organization
- Upstream sources: Uncheck (you'll push packages directly)
- Click Create
- Note the feed URL — it looks like:
https://{org}.pkgs.visualstudio.com/{project}/_packaging/{feed}/nuget/v3/index.json
Step 3: Upload DevALM NuGet Packages
You need 6 packages from the LCS Shared Asset Library (or download from a build VM):
| Package ID | What It Contains |
|---|---|
| Microsoft.Dynamics.AX.Application.DevALM.BuildXpp | Application metadata for compilation |
| Microsoft.Dynamics.AX.Application1.DevALM.BuildXpp | Application layer 1 |
| Microsoft.Dynamics.AX.Application2.DevALM.BuildXpp | Application layer 2 |
| Microsoft.Dynamics.AX.ApplicationSuite.DevALM.BuildXpp | Application Suite metadata |
| Microsoft.Dynamics.AX.Platform.CompilerPackage | X++ compiler + build tools |
| Microsoft.Dynamics.AX.Platform.DevALM.BuildXpp | Platform metadata for compilation |
Getting the Packages
From LCS:
- Go to LCS > Shared Asset Library > NuGet packages
- Download each .nupkg file matching your target F&O version
From a Cloud-Hosted Build VM:
- The packages are already in K:\DeployablePackages\ or the NuGet cache
- Copy the .nupkg files locally
From Visual Studio:
If you have VS 2022 or newer and the latest version of Finance and Operations tools installed, you may have an option to download them directly via API. I'll update this section later when this is generally available.
Pushing to Your Feed
# Install the Azure Artifacts Credential Provider if needed # Then push each package: nuget push Microsoft.Dynamics.AX.Application.DevALM.BuildXpp.10.0.2428.99.nupkg -Source "D365" -ApiKey az nuget push Microsoft.Dynamics.AX.Platform.CompilerPackage.7.0.7778.47.nupkg -Source "D365" -ApiKey az # ... repeat for all 6 packages
The -ApiKey az works with the Azure Artifacts credential provider for authentication.
Step 4: Configure Your Repository
Update src/xpp/build/nuget.config to point at your feed:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<clear />
<add key="D365" value="https://{org}.pkgs.visualstudio.com/{project}/_packaging/{feed}/nuget/v3/index.json" />
</packageSources>
</configuration>
Update src/xpp/build/packages.config to match the versions you uploaded:






