Customization XML to solutions to pipelines: packaging from CRM 3.0 to Dataverse
How customizations moved between systems in each era, how managed layers decide which definition wins, and why removing one field can be blocked by, or break, something else.
Answer first
Every era moved customizations as a file, but what an import did to the components already in the target changed a lot:
| Era | What you moved | What an import did to existing components |
|---|---|---|
| CRM 3.0 | One exported XML file of customizations | Overwrote that entity’s earlier customizations |
| CRM 4.0 | A customization file, for all or selected entities | Mostly overwrote by name; a few collisions raised errors, and custom security roles merged |
| CRM 2011 | Solutions, unmanaged or managed | Unmanaged overwrote; managed went into layers. Neither could delete a component |
| CRM 2013 to 2015 | Solutions, optionally targeted at an older version | A solution from a newer version wouldn’t install into an older one |
| CRM 2016 (8.0) | Solutions and patches | Patches could add or update, never remove; an upgrade removed |
| Dataverse | Solutions, deployed by hand, by pipelines or by CI/CD | Upgrade deletes components the new version no longer has; update doesn’t |
Why removing one field breaks something else. Since CRM 2011 the platform has tracked dependencies between components. It won’t delete a field that a form, view, workflow or another solution still uses. When uninstalling a managed solution does remove a custom field, the data in it goes too. And a field you thought you’d removed may still be there, because an update, a patch or a 2011 solution never deleted anything.
Sources: the CRM 3.0 Help, the CRM 4.0 SDK, the CRM 2011 and 2016 SDKs, archived CRM 2013 documentation, and Microsoft’s current Power Platform ALM documentation. Each section below names its own.
Why a component can’t be deleted
Sources: Microsoft’s “Dependency tracking for solution components” and “Removing dependencies overview”. The same dependency rules appear in the CRM 2011 SDK.
- Dependencies are tracked automatically. Every operation on a component
recalculates them, and the platform:
- blocks deleting a component that another component depends on;
- warns on export when required components are missing;
- fails an import when required components are neither in the solution nor in the target.
- A managed solution can only depend on managed components.
- Microsoft’s own example: if a lookup column is on a form, you can’t delete the table on the other side of the relationship until you remove the lookup from the form and publish it.
- Unmanaged dependencies are fixed on the component, not in a solution: remove the column from the form in the form designer, then save and publish.
- Managed dependencies are fixed with a new solution version. Find the topmost solution layer of the dependent component, build a version of that solution without the reference, upgrade it in the target, and retry.
- Dependencies are only calculated between the topmost layers. Removing one can reveal the next layer down, so work from the top of the stack to the bottom.
- Uninstalling a managed solution deletes data. Data in the solution’s custom tables, and in its custom columns on other tables, is lost. The CRM 2011 SDK gave the same warning.
Layers: which definition wins
Sources: Microsoft’s “Solution layers” and “Removing dependencies overview”. The 2011 behaviour is from the CRM 2011 SDK.
- One unmanaged layer, many managed layers. All unmanaged solutions and direct customizations share a single unmanaged layer on top. Managed solutions stack in install order above the system layer, so a later one can customize an earlier one.
- Most components are “top wins”. Only model-driven apps, forms and the site map are merged. For everything else, the top layer decides runtime behaviour.
- Unmanaged changes in test or production override managed ones. The unmanaged layer sits on top. The Remove Active Customization feature removes it.
- Publishers matter when uninstalling. Uninstalling the base solution deletes the component, and it’s blocked while a solution from a different publisher extends it. If another solution from the same publisher also holds a layer, the component stays.
- In CRM 2011, importing a newer copy of a managed solution offered Maintain customizations (recommended) or Overwrite customizations. Keeping unmanaged customizations meant some of the update wouldn’t take effect.
- How forms merged in 2011: a managed solution carried only its differences from the original FormXML. Fields added to an existing section appeared at the end of it, which is why the SDK recommended putting new fields in new tabs or sections.
Update, upgrade or patch
Sources: Microsoft’s “Upgrade or update a solution”, “Create and update solutions”, “Solution concepts” and “Solution layers”.
| Import choice | Deletes components the new version dropped? | Notes |
|---|---|---|
| Upgrade | Yes | The default. Rolls up earlier patches in the same step |
| Stage for upgrade | Yes, when you apply the upgrade | Old and new versions installed side by side, for data migration first; shows as a solution ending _Upgrade |
| Update | No | Fastest, but the target can drift from the source |
| Patch | No | Adds or updates only. Microsoft doesn’t recommend patches or cloning |
- A patch locks its parent. While patches exist, the parent solution can’t be changed or exported.
- Deleting a parent deletes its patches, in one transaction.
- Increment the version when exporting the managed solution that updates an installed one.
Other controls that decide what an import changes
- Segment tables. Add only the table components you changed. Include all objects is for tables the target doesn’t have yet. Unchanged components add a layer, and existing customizations below it in the target might become inactive. Source: “Use table segmentation in solutions”.
- Managed properties lock what others can customize after a managed install. You set them while the solution is unmanaged, and only an update from the original publisher changes them. Microsoft says they aren’t a licensing or DRM mechanism. Sources: “Managed properties” and the CRM 2011 SDK.
- Environment variables and connection references carry the values that differ per environment. Pipelines ask for them before deploying. Sources: “Environment variables for Power Platform overview” and “Overview of pipelines in Power Platform”.
- Solutions don’t carry table data. Neither do pipelines. Source: “Overview of pipelines in Power Platform”.
How packaging got here
CRM 3.0: one XML file
Sources: the CRM 3.0 application Help and server readme. Details on CRM 3.0.
- Customizations were exported and imported as XML, including the Site Map, which new entities needed in order to appear.
- Importing an entity overwrote its earlier customizations in the target.
- Files over about 7.5 MB hit the ASP.NET request limit unless
maxRequestLengthwas raised.
CRM 4.0: the customization file and collision rules
Sources: the CRM 4.0 SDK and application Help. Details on CRM 4.0.
-
Export All Customizations or selected entities, from Settings, Customization. The same file came from the export messages in the web services.
-
The file carried more than entities: entity maps and relationships, isv.config, the Site Map, templates, organization settings, security roles and workflows. The System Administrator role wasn’t exported.
-
Collisions followed fixed rules:
On import Result Forms, views, templates or isv.config with the same name Overwritten Properties changeable in the web application Overwritten Properties not changeable in the web application Error Custom security role with the same ID Merged The System Administrator role Skipped -
Relationships travelled only with both entities, exported and imported together.
-
Changes made outside the SDK and the customization tools weren’t supported and weren’t preserved through updates or upgrades.
CRM 2011: solutions
Source: the CRM 2011 SDK. Details on CRM 2011.
- Solutions arrived, unmanaged and managed. The SDK called an unmanaged solution roughly what 4.0 customizations were, except that a component could now belong to any number of groups.
- Solutions could add or overwrite components, but not delete them.
- Importing an unmanaged solution overwrote existing definitions with no undo, “the same behavior used in” CRM 4.0.
- The default solution, everything in Customize the System, could be exported unmanaged but never managed.
- Publishers brought the customization prefix (two to eight characters,
not starting with
mscrm) and an option value prefix between 10,000 and 99,999. Managed solutions from the same publisher could update each other. - Maintaining a managed solution: release a new version from the original unmanaged source, or a smaller update solution under the same publisher. The SDK warned that uninstalling and reinstalling was “practically never an option”, because data is lost.
- A minimum version could be set by editing
minimumversioninsolution.xml, which defaulted to5.0.0.0. - SolutionPackager appeared in the SDK for Update Rollup 10, to split solution files for source control.
CRM 2013 to 2015: version targeting
Sources: archived CRM 2013 documentation and the CRM 2016 SDK. Details on CRM 2013 and CRM 2015.
- Solutions stopped installing into older versions, including older minor versions.
- Export could target an older version: 6.0 from 2013 Service Pack 1, and
7.0 from CRM Online 2015 Update 1. Components are removed, modified or
replaced based on each component’s
IntroducedVersion. The exported zip names the target, for example_target_CRM_7.0, and includes afilteredcomponents.xmlreport. - Solutions could be imported asynchronously with
ExecuteAsyncRequest, and the Package Deployer deployed several solutions and data files as one package.
CRM 2016 (8.0): patches, and removal by upgrade
Source: the CRM 2016 SDK. Details on CRM 2016.
- Patches let you ship parts of a table instead of the table with all its
assets. They’re solution records with a
ParentSolutionId, created withCloneAsPatchRequest. - A patch keeps its parent’s major and minor version and must match its parent’s package type: a managed patch goes on a managed parent.
- To remove components, perform an upgrade, in the SDK’s words; patches can’t remove.
Dataverse: source control and pipelines
Sources: Microsoft’s current Power Platform ALM documentation.
-
Unmanaged solutions are the source; managed solutions are build artifacts. Microsoft says to check exported unmanaged solutions into source control. A managed solution can’t be imported into the environment that holds its unmanaged original.
-
SolutionPackager is no longer the recommended tool. Its capabilities are in the Power Platform CLI:
pac solutionwith verbs such asunpack,pack,cloneandsync. -
Pipelines deploy from inside the product:
- they check dependencies before deploying;
- they ask for connections and environment variables up front;
- they support approvals through delegated deployments.
They can’t deploy to another tenant; Microsoft points to Azure DevOps or GitHub for that.
-
Managed environments for pipeline targets: Microsoft said it would start enabling them for pipeline targets from February 2026.
-
A solution can be up to 95 MB.
If you find this
Sources: as for each section above. The “Likely means” column is this site’s reading of those sources, not a diagnosis.
| You find | Likely means |
|---|---|
A customization export with no solution.xml beside it |
A CRM 3.0 or 4.0 export, from before solutions |
| Fields you removed in development still in production | An update or patch was imported, not an upgrade |
A solution whose name ends _Upgrade |
A staged upgrade that hasn’t been applied |
A solution record with ParentSolutionId set |
A patch |
filteredcomponents.xml in a solution zip |
The zip was exported for an older version, and components were changed or left out |
| Behaviour in production that doesn’t match the managed solution | An unmanaged layer on top; check the solution layers |
Sources
- Solution concepts Microsoft's solution concepts: managed and unmanaged solutions, data lost when a managed solution is deleted, the 95 MB size limit, update, upgrade and patch, publishers and prefixes, and solution dependencies.
- Solution layers Microsoft's explanation of the unmanaged and managed layers, layers within a managed solution, top-wins behaviour, and the component types that merge (model-driven apps, forms and site maps).
- Removing dependencies overview Microsoft's guide to removing solution dependencies: unmanaged versus managed components, uninstall scenarios across publishers, diagnosing dependencies through solution layers, and why only topmost layers are compared.
- Dependency tracking for solution components Microsoft's description of automatic dependency tracking: blocked deletes, export warnings, import failures, managed-only dependencies, and internal, published and unpublished dependencies.
- Upgrade or update a solution Microsoft's steps for importing a newer version of a managed solution, with the Upgrade, Stage for Upgrade and Update options and what each does to components missing from the new version.
- Create and update solutions Microsoft's guidance on updating solutions and on patches and cloned solutions: not recommended, parent locking, deleting parents, and version numbering.
- Overview of pipelines in Power Platform Microsoft's overview and FAQ for in-product deployment pipelines: prevalidation, connections and environment variables, delegated deployments, no data or cross-tenant deployment, and managed environments for pipeline targets.
- Environment variables for Power Platform overview Microsoft's overview of environment variables as solution components: definitions and values, data types, and supplying values when solutions are imported.
- Use table segmentation in solutions Microsoft's guidance on adding only changed table components to solutions, when to use Include all objects, and how unintended components add layers that can deactivate existing customizations.
- SolutionPackager tool Microsoft's SolutionPackager reference, noting that the tool is no longer the recommended way to unpack and pack solutions and that pac solution incorporates its capabilities.
- Managed properties Microsoft's description of managed properties: controlling what can be customized after a managed install, set while unmanaged, changed only by the original publisher, and not a DRM or licensing mechanism.
- Overview of application lifecycle management with Microsoft Power Platform Microsoft’s ALM overview: solutions as the mechanism for moving components between environments, Dataverse storing solutions and in-product pipelines, source control as the source of truth, and CI/CD platforms such as Azure DevOps.
- Microsoft CRM 3.0 application Help: customization topics Private archive: Microsoft CRM 3.0 Professional server install media (CD 1), wwwroot/Help/PRO/Content Microsoft’s built-in Help for CRM 3.0, read as HTML from the install media: customizing entities, attributes, forms, views and relationships, event scripts (onLoad, onSave, onChange), exporting and importing customizations, and troubleshooting what cannot be customized.
- Microsoft CRM 3.0 Readme (server CD, September 2006) Private archive: Microsoft CRM 3.0 Professional server install media (CD 1), Readme.htm Microsoft’s release readme on the 3.0 server CD: the CD contents, where the Implementation Guide and SDK were published (the SDK’s Server Programming, Client Programming and Report Writers guides), upgrade from CRM 1.2 only, .NET Framework 1.1 SP1 and SQL Server 2000 SP4 requirements, the customization.xml import size limit, and privileges that upgraded custom roles do not receive. Read as a document from Microsoft install media; nothing on the disc was run.
- Microsoft Dynamics CRM 4.0 SDK (compiled help, CrmSdk4.chm, version 4.0.13, November 2010) Private archive: CRM-SDK-Rescue/4.0-SDK/sdk/crmsdk4.chm Microsoft's SDK help for CRM 4.0 Update Rollup 13 and CRM Online: plug-in development (IPlugin, the execution context, the unsecure and secure constructor strings), the event execution pipeline and its parent and child pipelines, registration and deployment, impersonation, error handling, offline plug-ins, execution of CRM 3.0 callouts, the 2006 endpoint, and what is new in the 4.0 web services. Extracted without running anything from CrmSdk4.exe, whose Microsoft Authenticode signature is valid and which the Internet Archive captured from download.microsoft.com. All 12,022 pages carry Microsoft's copyright. Quote sparingly and cite; do not republish.
- Microsoft Dynamics CRM 4.0 application Help: customization and workflow topics Private archive: Microsoft Dynamics CRM 4.0 install media (DVD), Server/i386/wwwroot/help/1033/OP/Content Microsoft’s built-in on-premises Help for CRM 4.0, read as HTML from the install media: customization capabilities and privileges, 1:N, N:1, N:N and self-referential relationships, form scripting, workflows in the web application, duplicate detection, data import, translation of customized text, and the three WSDL files.
- Microsoft Dynamics CRM 2011 SDK (compiled help, CrmSdk2011.chm) Private archive: CRM-SDK-Rescue/2011-SDK_from_desk/SDK/CrmSdk2011.chm Microsoft's own SDK help for the 2011 release, from an owner-held copy. Static reading only; the package is never executed and is not part of this repository. Quote sparingly and cite; do not republish.
- What’s new for developers (Microsoft Dynamics CRM 2013 SDK, archived) Microsoft’s archived CRM 2013 developer what’s-new, in two parts. CRM 2013 and CRM Online Fall ’13 (6.0): entity images, access teams, business process flows, real-time workflows, custom actions, field-level data encryption, solutions no longer installable into older versions, asynchronous solution import, read-optimized forms removed, and AttributeTypeName replacing AttributeType. CRM 2013 Service Pack 1 and CRM Online Spring ’14 (6.1): duplicate detection on create and update restored, exporting a solution for 6.0, custom state model transitions, the Package Deployer, XRM Tooling and the updated Plug-in Registration tool.
- Microsoft Dynamics CRM 2016 / Dynamics 365 SDK (compiled help, Dynamics365SDK.chm, and SDK tree) Private archive: CRM-SDK-Rescue/2016-D365-SDK_from_DESKTOP-Code/SDK Microsoft SDK for the 8.x era, from an owner-held copy: the compiled help (Dynamics365SDK.chm, read as documents, never executed), sample code, schemas and UII material. Its what’s-new topic covers CRM 2016 (8.0), CRM 2016 Service Pack 1 (8.1) and the December 2016 update for Dynamics 365 (8.2). Quote sparingly and cite; do not republish. Its SampleCode/CS/HelperCode/OptionSets.cs lists the component type values the 2016 SDK knew.