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 maxRequestLength was 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 minimumversion in solution.xml, which defaulted to 5.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 a filteredcomponents.xml report.
  • 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 with CloneAsPatchRequest.
  • 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 solution with verbs such as unpack, pack, clone and sync.

  • 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

  1. Solution concepts Microsoft · · Primary, current docs 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.
  2. Solution layers Microsoft · · Primary, current docs 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).
  3. Removing dependencies overview Microsoft · · Primary, current docs 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.
  4. Dependency tracking for solution components Microsoft · · Primary, current docs Microsoft's description of automatic dependency tracking: blocked deletes, export warnings, import failures, managed-only dependencies, and internal, published and unpublished dependencies.
  5. Upgrade or update a solution Microsoft · · Primary, current docs 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.
  6. Create and update solutions Microsoft · · Primary, current docs Microsoft's guidance on updating solutions and on patches and cloned solutions: not recommended, parent locking, deleting parents, and version numbering.
  7. Overview of pipelines in Power Platform Microsoft · · Primary, current docs 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.
  8. Environment variables for Power Platform overview Microsoft · · Primary, current docs Microsoft's overview of environment variables as solution components: definitions and values, data types, and supplying values when solutions are imported.
  9. Use table segmentation in solutions Microsoft · · Primary, current docs 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.
  10. SolutionPackager tool Microsoft · · Primary, current docs 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.
  11. Managed properties Microsoft · · Primary, current docs 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.
  12. Overview of application lifecycle management with Microsoft Power Platform Microsoft · · Primary, current docs 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.
  13. Microsoft CRM 3.0 application Help: customization topics Microsoft · Primary, archived 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.
  14. Microsoft CRM 3.0 Readme (server CD, September 2006) Microsoft · Primary, archived 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.
  15. Microsoft Dynamics CRM 4.0 SDK (compiled help, CrmSdk4.chm, version 4.0.13, November 2010) Microsoft · Primary, archived 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.
  16. Microsoft Dynamics CRM 4.0 application Help: customization and workflow topics Microsoft · Primary, archived 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.
  17. Microsoft Dynamics CRM 2011 SDK (compiled help, CrmSdk2011.chm) Microsoft · Primary, archived 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.
  18. What’s new for developers (Microsoft Dynamics CRM 2013 SDK, archived) Microsoft · · Primary, 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.
  19. Microsoft Dynamics CRM 2016 / Dynamics 365 SDK (compiled help, Dynamics365SDK.chm, and SDK tree) Microsoft · Primary, archived 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.