Skip to content

Instantly share code, notes, and snippets.

@svick
Created February 26, 2016 14:56
Show Gist options
  • Select an option

  • Save svick/6a20876f9b6931f96012 to your computer and use it in GitHub Desktop.

Select an option

Save svick/6a20876f9b6931f96012 to your computer and use it in GitHub Desktop.
Get overloads of method per platform from NuGet package
using System;
using System.IO;
using Mono.Cecil;
using System.Linq;
using System.Threading.Tasks;
using System.Net.Http;
using Ionic.Zip;
class Program
{
static void Main()
{
MainAsync().Wait();
}
static async Task MainAsync()
{
var packageBytes =
await new HttpClient().GetByteArrayAsync("https://www.nuget.org/api/v2/package/WindowsAzure.Storage/6.2.2-preview");
var packageStream = new MemoryStream(packageBytes);
var file = ZipFile.Read(packageStream);
var entries = file.Where(e => e.FileName.EndsWith("/Microsoft.WindowsAzure.Storage.dll"));
foreach (var entry in entries)
{
string platform = entry.FileName.Split('/')[1];
Console.WriteLine(platform);
var assemblyStream = new MemoryStream();
entry.Extract(assemblyStream);
assemblyStream.Position = 0;
var assembly = AssemblyDefinition.ReadAssembly(assemblyStream);
var type = assembly.MainModule.GetType("Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob");
var methods = type.Methods.Where(m => m.Name == "UploadFromStreamAsync");
foreach (var method in methods)
{
Console.WriteLine(FormatMethod(method));
}
Console.WriteLine();
}
}
static string FormatMethod(MethodDefinition method)
{
var parameters = string.Join(", ", method.Parameters.Select(FormatParameter));
return $"{FormatType(method.ReturnType)} {method.Name}({parameters})";
}
private static string FormatParameter(ParameterDefinition parameter)
{
return $"{FormatType(parameter.ParameterType)} {parameter.Name}";
}
static string FormatType(TypeReference type)
{
return type.Name;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment