Skip to content

Instantly share code, notes, and snippets.

@karanjitsingh
Last active June 1, 2017 10:28
Show Gist options
  • Save karanjitsingh/6de9e6dc4b0ae38e7542f789f07ba27f to your computer and use it in GitHub Desktop.
Save karanjitsingh/6de9e6dc4b0ae38e7542f789f07ba27f to your computer and use it in GitHub Desktop.
.NET Core portable assemblies package.config generator. Convert* your .NET Standard project to .NET Core.
# Copy your .NET standard project files to an empty .NET core project and build it
# Save the error log to a file (eg. builderrors.log)
#
# Usage:
# python portable_packages.py builderrors.log packages.config
#
# NOTE: NOT ALL ASSEMBLIES IN .NET STANDARD ARE SUPPORTED BY .NET CORE
import re
import sys
import urllib
import json
if len(sys.argv) < 2:
print "No error log specified!"
sys.exit()
if len(sys.argv) < 3:
print "No output file specified!"
sys.exit()
filename = sys.argv[1]
out = sys.argv[2]
errors = {
'0234': set(),
'0246': set()
}
unresolved = list()
packages = set()
patterns = [re.compile('.*CS0234.*\'(.*)\'.*\'(.*)\'.*'), re.compile('.*CS0246.*\'(.*)\'.*')]
try:
with open(filename) as file:
for line in file:
for p in patterns:
res = p.search(line.replace("AttributeAttribute", "Attribute")) # Error log bullshit
if res:
try:
errors['0234'].add(res.group(2) + "." + res.group(1))
break
except:
errors['0246'].add(res.group(1))
except ValueError:
print "Could not open file " + filename
sys.exit()
url = "http://packagesearch.azurewebsites.net/Search?searchTerm="
config = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>"
packageTemplate = "\n\t<package id=\"{0}\" version=\"{1}\" targetFramework=\"{2}\" />"
for name in errors['0234']:
response = urllib.urlopen(url + name)
data = json.loads(response.read())
found = False
# package = None
for result in data:
package = result['PackageDetails']
packages.add(packageTemplate.format(package['Name'], package['Version'], result['Tfms'][-1]))
print name
found = True
break
if not found:
unresolved.append(name)
for package in packages:
config += package
config += "\n</packages>\n"
with open(out, 'w') as file:
file.write(config)
if len(unresolved):
print "\nUnresolved:"
for name in unresolved:
print "\t" + name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment