Skip to content

Instantly share code, notes, and snippets.

@nwestfall
Created August 29, 2018 17:40
Show Gist options
  • Save nwestfall/b5f3752590d2131847f32d011cfb725d to your computer and use it in GitHub Desktop.
Save nwestfall/b5f3752590d2131847f32d011cfb725d to your computer and use it in GitHub Desktop.
Converts a packages.config file to the new <ItemGroup><PackageReference> format for you to paste in your .csproj
using System;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using System.Collections.Generic;
namespace NugetPackageConverter
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Converts nuget packages.config to an <ItemGroup> of <PackageReference>(s)");
string config = string.Empty;
do
{
Console.Write("Enter File or paste config (must be on one line): ");
config = Console.ReadLine();
if (!config.Contains("<packages>")) // file
{
if (!File.Exists(config))
Console.WriteLine("Oof! File doesn't exist");
else
{
config = File.ReadAllText(config);
break;
}
}
else
break;
} while (true);
Console.WriteLine("Reading config...");
string finalConfig = string.Empty;
using (var stringReader = new StringReader(config))
{
var packageDoc = XDocument.Load(stringReader);
var newDoc = new XDocument();
List<PackageItem> packageItems = new List<PackageItem>();
Console.WriteLine("Parsing packages...");
// parse packages
foreach(var package in packageDoc.Element("packages").Elements())
{
var packageItem = new PackageItem()
{
Name = package.Attribute("id").Value,
Version = package.Attribute("version").Value
};
Console.WriteLine($"Detected {packageItem.Name} at {packageItem.Version}");
packageItems.Add(packageItem);
}
Console.WriteLine("Creating package list in new format...");
// create new doc
newDoc.Add(new XElement("ItemGroup",
packageItems.Select(p => new XElement("PackageReference",
new XAttribute("Include", p.Name),
new XElement("Version", p.Version)))));
finalConfig = newDoc.ToString(SaveOptions.None);
}
Console.WriteLine("Paste this into your .csproj\n\n");
Console.WriteLine(finalConfig);
Console.WriteLine("\n\n\n\n\n Enjoy!");
Console.ReadKey();
}
}
public struct PackageItem
{
public string Name { get; set; }
public string Version { get; set; }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment