public static void Bind(string dllPath) { /*var file = Path.GetFileName(dllPath); * if (IgnoreAssemblySet.Contains(file)) * return;*/ DecompilerSetting = new DecompilerSettings(LanguageVersion.CSharp7); DecompilerSetting.ThrowOnAssemblyResolveErrors = false; Decompiler = new CSharpDecompiler(dllPath, DecompilerSetting); var dir = Path.GetDirectoryName(dllPath); DefaultAssemblyResolver resolver = new DefaultAssemblyResolver(); resolver.AddSearchDirectory(dir); ReaderParameters parameters = new ReaderParameters() { AssemblyResolver = resolver, ReadSymbols = false, }; ModuleDefinition module = ModuleDefinition.ReadModule(dllPath, parameters); moduleSet.Add(module); ICallGenerater.AddWrapperAssembly(module.Assembly.Name.Name); CSCGenerater.AdapterCompiler.AddReference(module.Name); foreach (var refAssembly in module.AssemblyReferences) { CSCGenerater.AdapterCompiler.AddReference(refAssembly.Name + ".dll"); CSCGenerater.AdapterWrapperCompiler.AddReference(refAssembly.Name + ".dll"); } moduleTypes = new HashSet <TypeReference>(module.Types); foreach (TypeDefinition type in moduleTypes) { if (!type.IsPublic) { continue; } AddType(type); } TypeResolver.WrapperSide = true; while (generaters.Count > 0) { var gener = generaters.Dequeue(); if (gener != null) { gener.Gen(); } } generaters.Clear(); }
public static void Bind(string dllPath) { var dir = Path.GetDirectoryName(dllPath); DefaultAssemblyResolver resolver = new DefaultAssemblyResolver(); resolver.AddSearchDirectory(dir); ReaderParameters parameters = new ReaderParameters() { AssemblyResolver = resolver, ReadSymbols = false, }; ModuleDefinition module = ModuleDefinition.ReadModule(dllPath, parameters); moduleSet.Add(module); var moduleTypes = new HashSet <TypeReference>(module.Types); foreach (TypeDefinition type in moduleTypes) { //Utils.Log(type.FullName); if (!CUtils.Filter(type)) { Utils.Log("ignor type:" + type.FullName); continue; } foreach (var method in type.Methods) { if (CUtils.IsIcall(method)) { if (!CUtils.Filter(method)) { Utils.Log("ignor icall:" + method.FullName); continue; } ICallGenerater.AddMethod(method); } else if (CUtils.IsEventCallback(method) && !method.IsConstructor) { if (!CUtils.Filter(method)) { Utils.Log("ignor event:" + method.FullName); continue; } EventGenerater.AddMethod(method); } } } }
public static void End() { EventGenerater.Gen(); ICallGenerater.Gen(); ClassCacheGenerater.Gen(); foreach (var m in moduleSet) { m.Dispose(); } moduleSet.Clear(); }