Solution layers: the Power Platform deployment behaviour teams must understand (4/15)
"The deployment worked, but the app did not change." If you have heard that sentence, you have probably met solution layers. They explain a surprising number of release incidents, and they are worth understanding before you need them.
What layers actually do
Dataverse does not simply keep the last thing you imported. It resolves each component's behaviour through a stack of layers: managed solutions at the bottom, in the order they were installed, and unmanaged customisations on top.
The top of the stack wins at runtime. So a managed release can import perfectly and still be hidden by an unmanaged change somebody made directly in the target environment months ago.
The three situations I see most
- The fix that never arrives. A form or view was edited directly in test or production. That unmanaged change sits above your managed release and keeps winning.
- The removal that does not remove. You deleted a component from the source solution, but the target still shows it. Removal depends on how the solution is upgraded, not only on what you exported.
- Two solutions, one component. Two managed solutions touch the same component, and the one installed later decides the outcome.
How to keep layers predictable
- Use managed solutions downstream. Test and production should receive managed releases only.
- Do not edit production components directly. If an urgent fix is needed, make it in development and release it, even if that feels slower.
- Remove active customisations deliberately. If an unmanaged layer is masking a release, remove it as a recorded change, not as a quiet clean-up.
- Test the removal path. Before promoting a major refactor, check that removed components actually disappear in a test environment.
Layers are not an abstract platform detail. I include layer inspection in normal release troubleshooting rather than treating it as a last resort, because it is usually the answer.
A practical next step
Pick one important production component — a main form or a key view — and document its current layers and which solution owns each one. If you find an unmanaged layer you cannot explain, you have found your next piece of drift.
Sources
References used for this article. Links open in a new tab.
- Microsoft Learn — Pre-populate connection references and environment variables for automated deployments using Power Platform Build Tools
- Microsoft Learn — Git version control
- Microsoft Learn — Managed solutions alm
- Microsoft Learn — Application lifecycle management (ALM) with Microsoft Power Platform
- GitHub Pages — pipelines and source control (PDF)