RemoveNugetFromSamples.cs 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.Xml;
  2. using System.Xml.Linq;
  3. using System.Xml.XPath;
  4. /*
  5. Changes nuget references to ProjectReferences in FeatureSamples.
  6. Nuget doesn't support ItemGroups with conditions (it will overwrite them on the next package update) so that's why this script exists
  7. By default, this utility removes urho.targets imports with native libs, use "-refsonly" arg to replace only <Reference>s
  8. */
  9. class P
  10. {
  11. static XmlNamespaceManager nsManager;
  12. static XNamespace ns;
  13. static bool onlyRefs;
  14. static void Main(string[] args)
  15. {
  16. if (args.Length > 0 && args[0] == "-refsonly")
  17. onlyRefs = true;
  18. var nsStr = "http://schemas.microsoft.com/developer/msbuild/2003";
  19. nsManager = new XmlNamespaceManager(new NameTable());
  20. nsManager.AddNamespace("p", nsStr);
  21. ns = nsStr;
  22. //FeatureSamples.Core
  23. var coreCsproj = @"Samples/FeatureSamples/Core/Urho.Samples.csproj";
  24. var coreDoc = XDocument.Load(coreCsproj);
  25. ReplaceRef(coreDoc, "Urho", "{641886db-2c6c-4d33-88da-97bec0ec5f86}", @"..\..\..\bindings\Urho.csproj", "Urho");
  26. coreDoc.Save(coreCsproj);
  27. //FeatureSamples.Droid
  28. var droidCsproj = @"Samples/FeatureSamples/Android/Urho.Samples.Droid.csproj";
  29. var droidDoc = XDocument.Load(droidCsproj);
  30. ReplaceRef(droidDoc, "Urho", "{641886db-2c6c-4d33-88da-97bec0ec5f86}", @"..\..\..\bindings\Urho.csproj", "Urho");
  31. ReplaceRef(droidDoc, "Urho.Droid", "{f0c1189b-75f7-4bd8-b394-a23d5b03eff6}", @"..\..\..\Bindings\Android\Urho.Droid.csproj", "Urho.Droid");
  32. ReplaceRef(droidDoc, "Urho.Droid.SdlBindings", "{9438f1bb-e800-48c0-95ce-f158a60abd36}", @"..\..\..\Bindings\Android\Urho.Android.SdlBindings\Urho.Droid.SdlBindings.csproj", "Urho.Droid.SdlBindings");
  33. RemoveTargets(droidDoc);
  34. droidDoc.Save(droidCsproj);
  35. //FeatureSamples.iOS
  36. var iosCsproj = @"Samples/FeatureSamples/iOS/Urho.Samples.iOS.csproj";
  37. var iosDoc = XDocument.Load(iosCsproj);
  38. ReplaceRef(iosDoc, "Urho", "{641886db-2c6c-4d33-88da-97bec0ec5f86}", @"..\..\..\bindings\Urho.csproj", "Urho");
  39. ReplaceRef(iosDoc, "Urho.iOS", "{9ae80bd9-e1e2-41da-bb6f-712b35028bd9}", @"..\..\..\Bindings\iOS\Urho.iOS.csproj", "Urho.iOS");
  40. RemoveTargets(iosDoc);
  41. iosDoc.Save(iosCsproj);
  42. //FeatureSamples.Desktop
  43. var desktopCsproj = @"Samples/FeatureSamples/Desktop/Urho.Samples.Desktop.csproj";
  44. var desktopDoc = XDocument.Load(desktopCsproj);
  45. ReplaceRef(desktopDoc, "Urho", "{641886db-2c6c-4d33-88da-97bec0ec5f86}", @"..\..\..\bindings\Urho.csproj", "Urho");
  46. ReplaceRef(desktopDoc, "Urho.Desktop", "{F0359D5E-D6D4-47D3-A9F0-5A97C31DC476}", @"..\..\..\Bindings\Desktop\Urho.Desktop.csproj", "Urho.Desktop");
  47. RemoveTargets(desktopDoc);
  48. desktopDoc.Save(desktopCsproj);
  49. }
  50. static void ReplaceRef(XDocument doc, string refName, string id, string path, string name)
  51. {
  52. var node = doc.XPathSelectElement($"//p:Reference[@Include='{refName}']", nsManager);
  53. if (node == null)//means it's already converted to ProjectReference
  54. return;
  55. node.Parent.Add(new XElement(ns + "ProjectReference", new XAttribute("Include", path),
  56. new XElement(ns + "Project", id),
  57. new XElement(ns + "Name", name)));
  58. node.Remove();
  59. }
  60. static void RemoveTargets(XDocument doc)
  61. {
  62. if (onlyRefs) return;
  63. doc.XPathSelectElement(@"//p:Import[contains(@Project, 'packages\UrhoSharp')]", nsManager)?.Remove();
  64. doc.XPathSelectElement(@"//p:Error[contains(@Condition, 'packages\UrhoSharp')]", nsManager)?.Remove();
  65. }
  66. }