Created
February 26, 2016 14:56
-
-
Save svick/6a20876f9b6931f96012 to your computer and use it in GitHub Desktop.
Get overloads of method per platform from NuGet package
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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