XmlUpgrader.Core
1.1.0
dotnet add package XmlUpgrader.Core --version 1.1.0
NuGet\Install-Package XmlUpgrader.Core -Version 1.1.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="XmlUpgrader.Core" Version="1.1.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="XmlUpgrader.Core" Version="1.1.0" />
<PackageReference Include="XmlUpgrader.Core" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add XmlUpgrader.Core --version 1.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: XmlUpgrader.Core, 1.1.0"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package XmlUpgrader.Core@1.1.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=XmlUpgrader.Core&version=1.1.0
#tool nuget:?package=XmlUpgrader.Core&version=1.1.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
XmlUpgrader
Easy to use .net standard library for upgrading xml documents to a new format. It supports:
- Renaming nodes, adding nodes with default value, removing nodes
- Includes automated tests for your upgrade scripts to produce the correct format
- Doing nothing if the xml file is already up to date
Usage of XmlFileUpgrader
var upgrader = new XmlFileUpgrader();
upgrader.AddRegistration(new Version(1, 0), xmlToUpgradeFilePath);
upgrader.AddRegistration(new Version(2, 0), xmlUpgradeReferencePath, typeof(ExampleXmlVersion2));
UpgradeResult result = upgrader.UpgradeXml(xmlToUpgradeFilePath);
// result.UpgradeNeeded -> true
// result.UpgradedFromVersion -> Version 1.0
// result.UpgradedToVersion -> Version 2.0
Implement an upgrade plan
- Create a class which implements
IUpgradePlanProvider - Create an
UpgradePlanand implement your xml modifications
Order of modifications:
- Delete
- Rename
- Add
class ExampleXmlVersion2 : IUpgradePlanProvider
{
public string TestString { get; set; }
public int TestInteger { get; set; }
public string AddedValue { get; set; }
public UpgradePlan GetUpgradePlan()
{
dynamic addedSettings = new ExpandoObject();
addedSettings.AddedValue = "I'm an added value!"; // default value
var upgradePlan = new UpgradePlan();
upgradePlan.AddElements(addedSettings);
return upgradePlan;
}
}
Add nodes
dynamic elementsToAdd = new ExpandoObject();
elementsToAdd.AddedStructure = new ExpandoObject();
elementsToAdd.AddedStructure.SettingOne = "works";
var upgradePlan = new UpgradePlan()
.AddElements(elementsToAdd);
Remove nodes
var removeElements = new List<string>();
removeElements.Add("/ExampleString"); // XPath
var upgradePlan = new UpgradePlan()
.RemoveElements(removeElements);
Rename nodes
Moves /ExampleString to /TestStructure/MovedSetting
dynamic renameMap = new ExpandoObject();
renameMap.TestStructure = new ExpandoObject();
renameMap.TestStructure.MovedSetting = "/ExampleString";
Integration test for your XmlFileUpgrader
[Fact]
public void DetailedRegistration()
{
var upgrader = new XmlFileUpgrader();
upgrader.AddRegistration(version_1, @"Examples\Xml\Config_v1.xml");
upgrader.AddRegistration(version_2, @"Examples\Xml\Config_v2.xml", typeof(ExampleConfigV2));
upgrader.Verify();
}
Conventions
- Xml file should have a version tag in its root node e.g.
<?xml version="1.0" encoding="utf-8"?>
<configuration version="1.0">
<TestString>HelloWorld</TestString>
<TestInteger>123</TestInteger>
</configuration>
XmlUpgrader uses internally System.Version. Visit MSDN for information on string formatting.
- Keep all file versions in your project to use the
.Verify()method e.g.- ServerConfigurationV1.0.xml
- ServerConfigurationV2.0.xml
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.